حياك الله يا أبا مشعل،
أولاً، أنا ذكرت أن استخدام session_unregister غير كافِ لأنه يقوم بإزالة تعيين المتغيرات ضمن متغيرات الجلسة ولكنه لا يقوم بإزالة قيمتها ما لم تقم بذلك بنفسك كأن تستخدم unset
ثانياً، بالنسبة للإضافة التي كتبتها بخصوص session.use_trans_id وذلك لأن إعدادات php الافتراضية تقوم باستخدام الجلسة عن طريق البصمة Cookie، حيث تقوم بتخزين معرف الجلسة (الكود الطويل المكون من مجموعة من الحروف وأرقام) داخل متغير Cookie في جهاز المستخدم دون أن يلاحظ المستخدم ذلك وهو متغير بصمة مختلف تماماً عن تلك التي يمكن تكوينها باستخدام setcookie والسبب في أنه حساس بالنسبة للمستعرض فقد يفقد بسرعة إذا وجد المستعرض أو المزود أن شيئاً ما حدث (تغير الاتصال، إقفال نوافذ المتصفح، تغيير رقم IP بشكل ملفت، الوصول إلى الصفحة من مكان غير متوقع أو تلاشي قيمة REFERRER.. وغيرها) وعندما يفقد فإنه سيعتبر المستخدم في جلسة جديدة ويستخدم معرف جلسة جديد) وهذا هو أحد الأسباب الذي يجعل التصفح في سوالف مثلاً من قبل أنواع من المستعرضات أو أولئك الذين يستخدمون موجوعة متوالية من الملقمات الوكيلة Proxies يسبب طلب اسم المستخدم وكلمة المرور بشكل متكرر نظراً لفقدان معرف الجلسة في متغير البصمة الحساس).
وهذا وإن كان يبدو أنه يعمل بشكل جيد، إلا أنه قد يواجه بعض المستخدمين مشاكل في ذلك كما ذكرت آنفاً، لذلك فإن أصررت على استخدامه فعليك أن تقوم بتهيئة PHP ليعامله معاملة خاصة وهي أن تقول:
كود PHP:
// استخدم متغير البصمة لتخزين معرف الجلسة
ini_set("session.use_cookies", 1);
// عدم استخدام معرف الجلسة في العنوان
ini_set("session.use_trans_sid", 0);
// تحديد مستوى الحماية للجلسة
// إلى مستوى الخصوصية بالنسبة للمستخدم الواحد
// حتى تكسب متغير الجلسة الحساسية التي تجعله آمناً بالنسبة للمستخدم الواحد
session_cache_limiter('private');
وهذه الإعدادات هي في العادة موجودة مسبقاً كإعدادت افتراضية default
أما إذا كنت لا تريد أن تستخدم متغير البصمة إياه حتى تجعل التصفح عبر موقعك مستقراً ولا يتأثر بالمستعرض أو المزود أو الملقمات الوكيلة، ولا تريد أن تجعل مستخدميك يفقدون جلساتهم خلال التصفح فإنك يجب أن تتوقف عن استخدام متغير البصمة وتستخدم معرف الجلسة التي يتم انتقاله عبر العنوان عادة كما في الشكل:
كود:
url?si=ced3fecabcfee3798dceaf
لذلك عليك أن تقوم بإعداد PHP لذلك فتكتب:
كود PHP:
// توقف عن استخدام متغير البصمة للجلسة
ini_set("session.use_cookies",0);
// استخدام معرف الجلسة
ini_set("session.use_trans_sid",1);
والذي سيجعل PHP يقوم بوضع معرف الجلسة مع كل ارتباط في صفحاتك تلقائياً، وكذلك أيضاً في النماذج حتى يجعل التصفح يقوم بتناقل معرف الجلسة من صفحة إلى أخرى تلقائياً.
ولأن استخدام معرف الجلسة ليس آمناً تماماً، إذا أنه تخيل أن شخصاً قام بنسخ عنوان ما من صفحته بعد دخوله فيها وأعطاها لصديق له عبر المسنجر مثلاً فذلك سيجعل كلا الصديقين يدخلان نفس الموقع باستخدام نفس الجلسة، وما كان للزائر الأول سيكون للثاني (صلاحيات المستخدم مثلاً) لذلك يجب أن تقوم بوضع احتياطات تمنع ذلك، كأن تقول:
كود PHP:
// التأكد من مصدر القدوم
// قم باستبدال host/path
// ليكون مصدر القدوم هو من موقعك نفسه
ini_set('session.referer_check', "host/path");
وهذا يمنع حدوث مثل تلك الحالة حيث يقوم PHP تلقائياً بالتأكد من أن معرف الجلسة آت من صفحة سابقة في نفس الموقع، وإلا فإنه سيقوم بتكوين جلسة جديدة للزائر الآخر.
كما أنك قد تحتاج أيضاً لزيادة في الحرص أن تقوم بتدوين رقم IP الزائر عند الدخول وبداية الجلسة، وتقوم بالتأكد من أنه نفس الرقم (أو مقارب له) عند الانتقال من صفحة إلى أخرى لتمنع وجود دخيل يستخدم نفس معرف الجلسة بأسلوب أو بآخر.
مرة أخرى، أتمنى أن تقوموا بتصحيح وضع كود php داخل المنتدى بأن تستخدم dir=ltr للكود، إذ أن شكل الكود من اليمين إلى اليسار مزري كما أرى، وشكراً لكم