wefr سألت ايضا الذكاء الاصطناعي جيميناي عن سؤالك فكانت إجابته كالتالي:
فهمت وجهة نظرك تماماً، ومن المنطقي جداً أن تشعر بأنها خطوة غير ضرورية طالما أنك لا تستخدم بطاقة ائتمان أو تخزن بيانات مالية.
لكن من الناحية التقنية، "الجلسة" (Session) في المواقع لا تتعلق فقط بالدفع أو الحساب، بل هي طريقة عمل المواقع ذاتها. إليك لماذا تظهر لك هذه الرسالة حتى في هذه الحالة:
1. سلة التسوق "ذاكرة مؤقتة"
حتى لو لم تملك حساباً، الموقع يحتاج لمكان يضع فيه المنتجات التي اخترتها (سلة التسوق). هذه السلة تُحفظ في "جلسة" مؤقتة مربوطة بمتصفحك.
- إذا بقيت الجلسة مفتوحة للأبد، ستمتلئ خوادم الموقع بملايين "السلال المهجورة" التي أنشأها زوار ولم يكملوا الشراء، مما يبطئ الموقع للجميع.
2. الحماية من "البوتات" (الروبوتات)
عملية "الدفع عند الاستلام" بدون حساب هي هدف سهل للهجمات البرمجية. يمكن لشخص ما تشغيل برنامج (Bot) يقوم بملء مئات الطلبات الوهمية في ثوانٍ.
- انتهاء الجلسة يطلب من المستخدم "تفاعلاً" بشرياً جديداً، مما يعطل عمل هذه البرامج التي تحاول إغراق الموقع بطلبات وهمية تضر بالتاجر.
3. منع تضارب البيانات
تخيل أنك تركت الصفحة مفتوحة لساعات، ثم جئت لتطلب "دفع عند الاستلام". خلال هذه الساعات، قد يكون المنتج قد نفد من المخزن، أو تغير سعره.
- "انتهت الجلسة" تجبر المتصفح على تحديث البيانات لضمان أنك تطلب شيئاً متوفراً وبسعره الحالي، وليس سعره قبل يومين.
4. حماية خصوصية عنوانك
حتى مع الدفع عند الاستلام، أنت تضع معلومات حساسة مثل: (اسمك، رقم هاتفك، وعنوان منزلك بالتفصيل).
- لو تركت الصفحة مفتوحة في مكان عام أو على جهاز مشترك، فإن انتهاء الجلسة يمنع أي شخص آخر يجلس بعدك من رؤية عنوانك أو رقم هاتفك الذي أدخلته في الخانات قبل قليل.
خلاصة الأمر: المواقع لا تفرق عادة بين من يدفع إلكترونياً ومن يدفع عند الاستلام في "نظام الجلسات"، فهي تطبق قانوناً واحداً على الجميع لضمان استقرار الخادم وحماية البيانات التي تدخلها (حتى لو كانت مجرد اسم وعنوان).
ثم سألته التالي:
هل الكوكيز هي التي تقوم بعملية ال session ended وماذا افعل لاجعل الكوكيز لا تفعل ذلك في المواقع برمجيا بمعنى ما الكود المطلوب لإلغاء ذلك من خلال ووردبريس ومن خلال لارافيل
فكانت إجابته كالتالي:
نعم، تخمينك دقيق جداً. الكوكيز (Cookies) هي "بطاقة الهوية" التي يحملها متصفحك ليخبر الموقع بأنك صاحب هذه الجلسة. عندما تنتهي صلاحية الكوكيز أو يتم حذفها، يفقد الموقع القدرة على التعرف عليك، فتظهر رسالة "Session Ended".
لكن برمجياً، التحكم في انتهاء الجلسة يعتمد على طرفين: المتصفح (الكوكيز) والسيرفر (الجلسة).
إليك كيفية إطالة أمد الجلسة أو منع انتهائها في كل من ووردبريس ولارافيل:
1. في ووردبريس (WordPress)
ووردبريس يعتمد على "فلتر" (Filter) للتحكم في مدة بقاء المستخدم مسجلاً للدخول. الوضع الافتراضي هو يومين، أو 14 يوماً إذا اخترت "تذكرني".
لجعل الجلسة تدوم لفترة طويلة جداً (مثلاً سنة)، أضف هذا الكود في ملف تسجيل الدخول لعرض الكود:
تسجيل الدخول لعرض الكود
تسجيل الدخول لعرض الكود
تسجيل الدخول لعرض الكود
تسجيل الدخول لعرض الكود
ملاحظة: إذا كنت تستخدم إضافة "Contact Form 7" أو سلة تسوق وتواجه مشكلة انتهاء الجلسة للزوار (غير المسجلين)، فقد يكون السبب هو إضافات الكاش (Caching). يجب استثناء صفحات "الدفع" أو "السلة" من الكاش.
2. في لارافيل (Laravel)
لارافيل يوفر تحكماً كاملاً وسهلاً جداً من خلال ملفات الإعدادات. لا تحتاج لكتابة كود معقد، فقط اتبع الآتي:
أ. تغيير مدة الجلسة:
اذهب إلى ملف تسجيل الدخول لعرض الكود وقم بتغيير قيمة تسجيل الدخول لعرض الكود (القيمة بالدقائق):
تسجيل الدخول لعرض الكود
تسجيل الدخول لعرض الكود
ب. من خلال ملف الإعدادات (تسجيل الدخول لعرض الكود):
تأكد من الإعدادات التالية لضمان بقاء الكوكي نشطاً:
'expire_on_close' => false: هذا يمنع انتهاء الجلسة بمجرد أن يغلق المستخدم المتصفح.
'lottery' => [2, 100]: لارافيل يقوم أحياناً "بتنظيف" الجلسات القديمة عشوائياً، يمكنك تقليل هذه النسبة.
لماذا لا يمكنك "إلغاؤها" نهائياً؟
برمجياً، لا يوجد شيء اسمه "إلغاء انتهاء الجلسة" تماماً، لأن:
المتصفحات: لها حد أقصى لعمر الكوكي (غالباً سنتان).
السيرفر: يحتاج لمسح الجلسات القديمة لتوفير المساحة.
الأمان: إذا سرق شخص ما "Cookie" مسجل دخول للأبد، سيبقى متحكماً في الحساب للأبد.
نصيحة إضافية للمبرمجين:
إذا كنت تعاني من "Session Expired" أثناء ملء النماذج (Forms) الطويلة، فالحل ليس فقط إطالة الكوكي، بل استخدام Heartbeat Script. وهو كود (JavaScript) بسيط يرسل "إشارة" للسيرفر كل دقيقتين ليخبره: "أنا لا زلت هنا، لا تغلق الجلسة".
وإليك كود JavaScript (Heartbeat) بسيط وفعال. فكرة هذا الكود أنه يقوم بإرسال "نبضة" أو طلب صغير جداً إلى السيرفر كل فترة زمنية محددة (مثلاً كل دقيقة)، مما يجعل السيرفر يعتقد أن المستخدم لا يزال نشطاً، وبالتالي لا يقوم بإنهاء الجلسة.
كود JavaScript لمنع انتهاء الجلسة:
يمكنك وضع هذا الكود في ملف الـ JS الرئيسي الخاص بك أو داخل وسم تسجيل الدخول لعرض الكود في أسفل الصفحة:
تسجيل الدخول لعرض الكود
تسجيل الدخول لعرض الكود
تسجيل الدخول لعرض الكود
تسجيل الدخول لعرض الكود
تسجيل الدخول لعرض الكود
تسجيل الدخول لعرض الكود
تسجيل الدخول لعرض الكود
تسجيل الدخول لعرض الكود
تسجيل الدخول لعرض الكود
تسجيل الدخول لعرض الكود
تسجيل الدخول لعرض الكود
تسجيل الدخول لعرض الكود
تسجيل الدخول لعرض الكود
تسجيل الدخول لعرض الكود
تسجيل الدخول لعرض الكود
كيف تطبقه في "ووردبريس" و"لارافيل"؟
لجعل الكود أعلاه يعمل، يجب أن يستجيب السيرفر للمسار تسجيل الدخول لعرض الكود:
1. في لارافيل (Laravel):
أضف مساراً بسيطاً في ملف تسجيل الدخول لعرض الكود ليعيد استجابة فارغة (Status 200):
تسجيل الدخول لعرض الكود
تسجيل الدخول لعرض الكود
تسجيل الدخول لعرض الكود
2. في ووردبريس (WordPress):
ووردبريس لديه نظام نبضات مدمج يسمى Heartbeat API، ولكن إذا أردت استخدام الكود الخاص بك، يمكنك توجيه الطلب إلى ملف الـ تسجيل الدخول لعرض الكود أو ببساطة استخدام إضافة مثل "Heartbeat Control" التي تتيح لك التحكم في وتيرة النشاط من لوحة التحكم مباشرة.
كيف تعمل الجلسة مع الكوكيز (توضيح تقني)
لضمان استيعابك للمنظومة بالكامل، إليك كيف تترابط هذه العناصر معاً:
Cookie: هو المفتاح الموجود في جيب المتصفح.
Session: هو القفل الموجود في السيرفر.
Heartbeat: هو حركة المفتاح داخل القفل لإخبار السيرفر "أنا لا زلت هنا".
ملاحظة أمنية هامة:
رغم أن هذا الحل مريح جداً، إلا أنني أنصحك بعدم تطبيقه على الصفحات التي تحتوي على بيانات حساسة جداً (مثل تغيير كلمة المرور أو سحب الأموال). اجعل استخدامه مقتصرًا على سلة التسوق أو نماذج البيانات الطويلة لتسهيل التجربة على المستخدم دون التضحية بالأمان الكامل.