سؤال

كيف يمكنك تنفيذ ذلك في CodeIgniter؟

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

المحلول

(هذه الإجابة كانت ردًا على السؤال الأصلي)

كيف يمكنك أن تفعل هذا ؟أو ، كيف يمكنك إنشاء جلسة مع تاريخ انتهاء وقت أطول من الآخرين؟

ستستخدم جميع الجلسات التي تم إنشاؤها نفس $ config ['sess_expiration'] في ملف التكوين (افتراضي:7200 ثانية) ، هل هناك طريقة لتمرير قيمة مخصصة؟

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

هناك مقالة جيدة عن أفضل ممارسات ملفات تعريف الارتباط لتسجيل الدخول المستمر, ، والتي يمكن تلخيصها في:

  1. عندما يقوم المستخدم بتسجيل الدخول بنجاح مع تذكرني ، يتم إصدار ملف تعريف ارتباط تسجيل الدخول بالإضافة إلى ملف تعريف الارتباط القياسي لإدارة الجلسة.2
  2. يحتوي ملف تعريف الارتباط تسجيل الدخول على اسم المستخدم للمستخدم ورقم عشوائي ("الرمز المميز" من هنا فصاعدًا) من مساحة كبيرة بشكل مناسب.يتم تخزين اسم المستخدم والرمز المميز كزوج في جدول قاعدة البيانات.
  3. عندما يزور أحد المستخدمين غير الموقوفين الموقع ويعرض ملف تعريف ارتباط تسجيل الدخول ، يتم البحث عن اسم المستخدم والرمز المميز في قاعدة البيانات.1.إذا كان الزوج موجودًا، فسيتم اعتبار المستخدم مصادقًا عليه.تتم إزالة الرمز المميز المستخدم من قاعدة البيانات.يتم إنشاء رمز جديد ، وتخزينه في قاعدة البيانات باستخدام اسم المستخدم ، وإصداره للمستخدم عبر ملف تعريف ارتباط تسجيل الدخول الجديد.2.إذا لم يكن الزوج موجودًا، فسيتم تجاهل ملف تعريف ارتباط تسجيل الدخول.
  4. لا يُسمح للمستخدمين الذين يتم مصادقتهم إلا عبر هذه الآلية بالوصول إلى بعض المعلومات أو وظائف محمية مثل تغيير كلمة المرور أو عرض المعلومات الشخصية أو إنفاق الأموال.لتنفيذ هذه العمليات ، يجب على المستخدم أولاً إرسال نموذج تسجيل الدخول إلى اسم المستخدم/كلمة المرور العادي.
  5. نظرًا لأن هذا النهج يتيح للمستخدم الحصول على تسجيلات تسجيلات متعددة متذكرة من متصفحات أو أجهزة كمبيوتر مختلفة ، يتم توفير آلية للمستخدم لمحو جميع عمليات تسجيل الدخول التي يتم تذكرها في عملية واحدة.

مقال آخر يبني مزيدًا من الأمان على تلك الأفكار الموجودة في تحسين أفضل ممارسات ملفات تعريف الارتباط لتسجيل الدخول المستمر

إذا اتبعت الممارسات الواردة في تلك المقالات، فلن تخطئ كثيرًا!

نصائح أخرى

قد ترغب في إعادة النظر في الاقتراح المقدم من "أفضل الممارسات المحسنة لملفات تعريف الارتباط لتسجيل الدخول المستمر".لقد نشرت تحليلي للمشكلة على الموقع، ولكن جوهرها هو كما يلي:

لا يمكنك منع سرقة ملفات تعريف الارتباط بدون خط آمن، بغض النظر

(*أعني بـ "الخط الآمن" أنفاق SSL / VPN / تشفير المفتاح العام - أو نظام قوي للاستجابة للتحدي *)

أنا أؤيد أفضل ممارسات تسجيل الدخول المستمر، ولكن هناك نقطة حيث لن يساعد أي قدر من الخداع، وحيث فقط الطريق هو SSL.

وشكرا على الحل. لقد نفذت هذه في المشروع CI بلدي.

وDEV ملاحظة: يجب أن يكون الكعكة على بعد التجزئة المضمونة كمفتاح تذكر لي. - لا مجرد تخزين المستخدم معرف) - لا تقم بتخزين كلمة مرور، - وعدم تخزين تجزئة كلمة المرور. وبهذه الطريقة لا يستطيع الناس تسجيل الدخول تلقائيا إلى أي حساب.

والسيناريو الأسوأ: بمجرد هاكر يكتشف طريقة التجزئة، يمكنك ضبط وظيفة رئيسية منتج في مكان واحد ويتم تعيين لك مرة أخرى مع الأمن. أود فقط ضبط الملح والفلفل السلاسل.

وعلى أمل أن يساعد. كريس D. - من أستراليا:)

لهذه الأشياء، والمتغيرات CI في جميع الطبقات ويمكن الوصول إليها من قبل مكتبته الخاصة:

وعلى سبيل المثال:

$this->session->sess_expiration = 500000;

ونأمل أن حل مشكلتك.

وهناك مكتبة في جيثب لحفظ البيانات تحميل البرنامج.

<ع> استخدام وظيفة هذا المكتبة setCookie ()، يحدث ما يلي:

ويتم إنشاء الكعكة 1.A يحتوي على رقم فريد يتم تسجيل هذا الرقم في قاعدة بيانات الجدول، ودعا ci_cookies جنبا إلى جنب مع NETID / اسم المستخدم تنتقل إلى setCookie ()

و2.When ليتم استدعاء الدالة verifyCookie () الكوكي التجزئة المتصفح يجب أن تطابق التجزئة سجلت في قاعدة البيانات. إذا كان كذلك، verifyCookie () إرجاع صحيح إلى الأمام على الصفحة الرئيسية

وU تحتاج أسيوط مجموعة قبل جلسة الحمل

$do_not_remember = (boolean) $this->input->post('do_not_remember');
if ($do_not_remember) {
   $this->config->set_item('sess_expiration', 0);
   $this->config->set_item('sess_expire_on_close', true);
}
$this->load->library('session');
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top