JavaScript is not enabled!...Please enable javascript in your browser

جافا سكريبت غير ممكن! ... الرجاء تفعيل الجافا سكريبت في متصفحك.

Home

كيف واجهت وحللت خطأ “419 Page Expired” في Laravel بعد رفع المشروع – تجربة من واقع العمل

 




✍️ المقدمة:

في أحد المشاريع التي قمت برفعها على استضافة مشتركة (Shared Hosting)، بدأت تظهر لي رسالة غريبة بعد تسجيل الدخول أو إرسال نموذج:

["419 Page Expired"]


المشكلة لم تظهر أثناء التطوير محليًا، لكنها بدأت بمجرد نقل المشروع إلى السيرفر.
هذا النوع من الأخطاء مزعج لأنه لا يوضح السبب بشكل صريح، لكن بعد تحليل وتجارب كثيرة، وصلت للحل.

في هذا المقال سأشارك تجربتي خطوة بخطوة لحل الخطأ، وأسباب ظهوره، وكيف تتفاداه مستقبلًا.

🚨 متى يظهر الخطأ 419 في Laravel؟

رسالة الخطأ "419 Page Expired" تظهر عادة في الحالات التالية:

  • عند إرسال نموذج (form) بدون CSRF token

  • انتهاء صلاحية الجلسة (session)

  • عدم تطابق إعدادات الـ cookies أو التشفير

  • فقدان الـ session بعد الترحيل أو إعادة التشغيل

🛠️ خطوات عملية لحل الخطأ:

✅ 1. التأكد من وجود @csrf في النماذج

أول شيء تحققت منه هو وجود السطر التالي داخل كل فورم:

@csrf

بدونه، Laravel يرفض أي POST request لأسباب أمنية.

✅ 2. إعدادات الجلسة في ملف .env

تأكدت من أن إعدادات SESSION_DRIVER و APP_KEY صحيحة:

SESSION_DRIVER=file
APP_KEY=base64:...

🔹 إذا كانت APP_KEY فارغة أو تم تغييرها، فكل الجلسات تصبح غير صالحة.

✅ 3. تشغيل الأمر لتوليد مفتاح التشفير (إن لم يكن موجودًا)

php artisan key:generate

✅ 4. التأكد من صلاحيات مجلد التخزين

أحيانًا لا يمكن Laravel من حفظ الجلسات بسبب مشكلة في صلاحيات المجلد storage/framework/sessions.

الحل:

chmod -R 775 storage/

✅ 5. التأكد من إعدادات الـ Cookie

في ملف config/session.php، تأكدت أن اسم الـ cookie لا يتعارض مع إعدادات السيرفر، خاصة في الاستضافات المشتركة.

'domain' => null,

وفي بعض الحالات، اضطررت لتعديله يدويًا إذا كان لدي دومين فرعي.

✅ 6. تعديل مهلة الجلسة

إذا استغرقت وقتًا طويلاً قبل إرسال الفورم، تنتهي الجلسة تلقائيًا. لحل ذلك مؤقتًا:

'lifetime' => 120, // بالدقائق

🧪 مثال عملي:

كان لدي فورم تسجيل دخول كالتالي:

<form method="POST" action="{{ route('login') }}">
    @csrf
    <input type="email" name="email">
    <input type="password" name="password">
    <button type="submit">دخول</button>
</form>

بعد النقل إلى السيرفر، بدأت تظهر "419 Page Expired".
اكتشفت أن السبب هو:

  • تم تغيير APP_KEY

  • الجلسات لم تكن تُحفظ بسبب صلاحيات خاطئة في storage/

قمت بتعديلهم، وانتهت المشكلة تمامًا.

✅ الخلاصة:

خطأ "419 Page Expired" يبدو بسيطًا لكنه قد يكون مربكًا، خصوصًا عند رفع مشروع Laravel إلى بيئة جديدة.

إذا فهمت أسبابه، يمكنك حله خلال دقائق.
ركز دائمًا على:

  • CSRF

  • الجلسات

  • الـ cookies

  • إعدادات Laravel الخاصة بالأمان

💬 هل واجهت خطأ مشابه أثناء رفع مشروعك؟

اكتبه لي وسأغطيه في المقال القادم!

NameEmailMessage