سؤال

أنا أعمل على موقع على شبكة الإنترنت وأريد إنشاء تسجيل دخول المستخدم والجلسة. ما هي الطريقة الأكثر أمانا للتحقق مما إذا كانت الجلسة أم لا (مثل التحقق من ملف تعريف الارتباط أو جلسة الاختيار)، أو أي فكرة أفضل ثم استخدام جلسات في PHP؟

هل كانت مفيدة؟

المحلول

session_id() إرجاع معرف الجلسة للجلسة الحالية أو السلسلة الفارغة ("") إذا لم تكن هناك جلسة حالية (لا توجد معرف جلسة حالية).

http://de.php.net/manual/en/function.session-id.php.

ولكن هذا فقط يخبرك إذا كانت الجلسة نشطة أم لا.

معظم الوقت، أنا فقط اتصل session_start(); في بداية كل برنامج نصي (حتى إذا لم يتم تسجيل دخول المستخدم). عند تسجيل الدخول، قمت بتعيين $_SESSION['user'] مع معرف المستخدم أو كائن المستخدم. على الخروج، أنا فقط unset($_SESSION['user']);. وبعد عن طريق التحقق empty($_SESSION['user']) يمكنني التحقق مما إذا كان شخص ما لا يزال تسجيل الدخول أم لا. لا تفعل ذلك إذا كنت تخزن معلومات تعتمد على المستخدمين في مكان آخر في جلستك، وإلا فإن تسجيل الرجل التالي قد يحصل عليه معلومات أنه ليس من المفترض أن يرى (في هذه الحالة session_destroy();).

لكن السلامة؟ فقط إلغاء تنشيط جلسة الانتشار من خلال الحصول على ID GET / POST URL إعادة كتابة URL (ملفات تعريف الارتباط فقط)، لذلك لا ينتهي بهم الأمر في عناوين URL التي يمكن تخزينها مؤقتا أو موزعة على الآخرين (في هذه الحالة، سيكون اختطاف الدورة ممكنا). يمكنك القيام بذلك عن طريق الإعداد session.use_only_cookies في php.ini.

قد تكون هناك مشكلات أمان إضافية إذا استضافت على خادم مشترك غير موثوق بها و / أو غير موثوق بها - فقد يؤدي ذلك إلى أشخاص آخرين على نفس الجهاز في قراءة بيانات الجلسة الخاصة بك. في هذه الحالة، يمكنك تخزين بيانات الجلسة الخاصة بك في قاعدة بيانات عن طريق إعادة كتابة معالج الجلسة الخاصة بك. ما عليك سوى البحث عن session handler mysql في InterTubes، أنا متأكد من وجود حلول جاهزة كافية. ولا تخزن معلومات حساسة مثل كلمات المرور في الجلسة، قم بتحسين استفسار في كل مرة تحتاج إلى مقارنتها.

بخلاف ذلك ... استخدم SSL / HTTPS لتسجيل الدخول وإدارة المستخدمين، لذلك لا يتم نقل كلمات مرور نصية. تخزين فقط PW-Hashes مع الملح في قاعدة البيانات. لا تدع أي شخص يرى كلمات المرور (المعنى: لا تطبعها أبدا إلى HTML أو رسائل البريد الإلكتروني). لا تستخدم قيم Auto_increment لمعرفات المعرفات التي يمكن للمستخدم أن يرىها (وبالتالي، تخمين). حسنا، هذا بالفعل خارج نطاق الأسئلة.

نصائح أخرى

إليك بعض البرامج التعليمية في سلامة الجلسة

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top