كيفية إنشاء آمن تسجيل الدخول php النظام ، مما يسمح ل "تذكرني" وظيفة ؟

StackOverflow https://stackoverflow.com/questions/1929340

سؤال

يمكنني استخدام نظام تسجيل الدخول بسيط على أساس الدورة فأر.بمجرد أن يسجل المستخدم في الدورة فار هو أن يقول السيناريو المستخدم هو أن تكون مقبولة في.أنا لا أستعمل أي مخصص clientside كوكي فار.

أود أن توفر خيار على شاشة تسجيل الدخول التي تقول "تبقى لي loggued في كل يوم".كيف لأحد أن يفعل ذلك بطريقة آمنة ؟

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

المحلول

الأولى:تكوين session.cookie_lifetime التوجيه سواء في php.ini ملفات التكوين ، أو عن طريق session_set_cookie_params().

المقبل, تخزين اسم المستخدم وكلمة قيمة التجزئة كلمة المرور في الدورة ، و التحقق من صحة تسجيل الدخول على كل صفحة.طالما أنها لا تزال صالحة ، فإنها تبقى تسجيل الدخول.

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

if (my_validate_user_function($_SESSION['username'],$_SESSION['passhash']) 
    && $_SESSION['deathstamp'] > time()
) {
    // user is logged in again, oh boy!
}
else {
    // send in the death robots
    header('Location: /login.php',true,302);
}

تحرير:شيء واحد قد ترغب في النظر الدورة التثبيت و/أو اختطاف الجلسة.من أجل منع ذلك ، أنصح واحد (أو كليهما) من حلين:

  1. تخزين عنوان IP المستخدم في الدورة
  2. استخدام session_regenerate_id() بعد كل نجاح محاولة تسجيل الدخول.

نصائح أخرى

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

وهكذا على سبيل المثال عندما أول تسجيل دخول المستخدم مع "البقاء متصلا طوال اليوم المحدد":

$_SESSION['log_me_out_at'] = strtotime(date("Y-m-d ")."23:59:59");

وبعد ذلك في كل مرة يتم الوصول إلى الصفحة في النظام الخاص بك:

if( $_SESSION['log_me_out_at'] < time() ){
  unset($_SESSION['user_is_accepted_in']);
}

يمكن أن يكون أحد الخيارات لإنشاء الخلية الجدول الذي يحفظ متغيرات جلسة العمل والمنتسبين لهم مع عناوين IP و انتهاء الصلاحية, لكن لست متأكد من كل التفاصيل عن الكيفية التي سيتم تنفيذها.

أبسط (على الرغم من لا موصى به) طريقة لفعل ما تبحث عنه سيكون تعيين $_COOKIE مع اسم المستخدم وكلمة المرور على جهاز الكمبيوتر الذي سوف موقعك ثم تحقق عندما يسجل المستخدم على.

لمزيد من الأمان ، هل سيكون من الافضل لانقاذ واحد فقط ملف تعريف الارتباط كما المملح تجزئة MD5 من بيانات المستخدم من أجل توفير إمكانية القراصنة أقل معلومات عن حساب المستخدم البيانات.مدة يمكن تعيين عند تعيين ملف تعريف الارتباط; php.net معقول وثائق كاملة عن كيفية القيام بذلك.

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