سؤال

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

أنا فقط أخذت نظرة كوهانا فب الجلسة مكتبة وأنا أحب كيفية إرجاعها إلى طريقة PHP الأصلية لاستخدام Superglobal $ _sesslobal بدلا من إجبار التغيير على هذه الدورة التدريبية $ للوصول إلى البيانات.

على أي حال، أردت أن أعرف ما إذا كانت هناك مكتبات جلسة جيدة أخرى هناك قد أكون العبث. هناك الكثير الذي يجب التعامل معه في جلسة إلى جانب CRUD وظيفيا.

  • دعم الجلسة القائمة على ملف تعريف الارتباط مرر (أي Facebook أو تحميل فلاش)
  • "بيانات الفلاش" التي تستمر فقط تحميل الصفحة التالية ثم إزالتها تلقائيا.
  • يعمل مع _session $ _session $-> حتى لا يتعين على المبرمجين تغيير التعليمات البرمجية الموجودة.
  • يدعم إعداد معرف جلسة جديد (IE Session_ID ("معرف جديد")) في حال كنت ترغب في تغيير المعرف في منتصف الطريق من خلال الصفحة.
  • يحفظ جميع البيانات في نهاية طلب الصفحة بدلا من كل مرة يتم إضافة البيانات أو إزالتها (يحفظ استعلامات DB إضافية).
  • يدعم استخدام الملفات أو ملفات تعريف الارتباط أو قاعدة البيانات للتخزين. (أو memcached سيكون لطيفا)
  • محاولات رفض الوصول في حالة اختطاف الجلسة. (IP، UserAgent، أو بصمة)

لقد قضيت بعض الوقت في المنطق لمكتبات جلسة Codeigniter و Kohana وتوصلت إلى ما يلي في كيفية بدء تشغيل كل منها وينتهي الدورات للصفحة.

/**************
** Kohana Sessions
**************/
If not native file storage {
    session_set_save_handler to the storage type (DB, cache, cookie...)
}

set the session_name() so php knows what cookie value to check

start session

/****** Saving ******/

session_write_close() which calls the given handler


/**************
** CI Sessions
**************/

Try to read_session() -> {
    session = Get cookie (if using cookies will also contain data)

    if(database) { 
        session .= pull data from database
    }

    checks if valid...

    $this->userdata = session data

} else { 
    create a new one
}

/****** Saving ******/

session data is serialized either way

if(cookie) {
    save cookie with serialized data and params like "last_activity"
}
if(database) {
    save serialized data in db and session in cookie
}
هل كانت مفيدة؟

المحلول

هل انتظرت Zend_Session?

  • يمكنك اجتياز معرف الجلسة عبر عنوان URL باستخدام إعدادات PHP
  • يمكنك الانتهاء من متغيرات جلسة معينة حسب الوقت أو القفزات (الطلبات)
  • لن يكون الترحيل في تطبيقات أخرى بهذه السهولة وأعتقد أنه ليس جيدا للغاية عند الفوضى $_SESSION عند استخدامها Zend_Session
  • Zend_Session لديه نهج يستند إلى ADPATER لحفظ بيانات الجلسة. أ حفظ المعالج يتم تضمين DBS، لكن الهندسة المعمارية الخاصة بها تسمح بمرور المعالجين المخصصين.
  • Zend_Session يدعم الموصلات للتحقق من صحة الجلسة. هنا أيضا لدينا بنية مفتوحة تتيح لك تمرير كائنات مخصصة للتحقق من الصحة.
  • يمكنك قفل جلسة، ويعرف أيضا باسم جعله للقراءة فقط
  • يمكنك منع إنشاء مثيلات متعددة من نفس مساحة الاسم
  • بالإضافة إلى هناك الكثير لاكتشافه Zend_Session مثل معرفات الجلسة المتجددة، تذكر كلمة ملفات تعريف الارتباط، إلغاء ملفات تعريف الارتباط المتتالية وما إلى ذلك.

نصائح أخرى

حسنا، بعد الحفر من خلال Customileiter Codeigniter العرف، غير الدورة غير القائم على الدورة، فإن Kohana و Zend Libs (والتي تستخدم $ _Session)، والعديد من مكتبات الجلسة الأخرى من المشاريع الأخرى التي أعتقد أنني أبني الإجابة على مشكلتي. شيء يرضي كل الأشياء التي أدرجتها أعلاه (باستثناء بيانات الفلاش).

هنا هو الكود إذا أراد أي شخص استخدامه أو قراءته أثناء بناء مكتبة خاصة بهم. تركت الكثير من التعليقات تفسر تماما كل شيء كله وأحب أن يكون لديك بعض الملاحظات على ذلك. وهو يدعم الرموز والهزة المحملة على الفلاش وملفات تعريف الارتباط وتجديد الجلسة كل 5 دقائق (أو أي ما قمت بتعيينه) مع إزالة الجلسات القديمة ودعم جلسات التخزين في أي قاعدة بيانات أو نظام الملفات أو memchache أو أي شكل آخر تريده تعيين.

الق نظرة Zebra_Session، التفاف لوظائف معالجة الدورة الافتراضية ل PHP، باستخدام MySQL للتخزين

  • يعمل كغلاف لمواجهة معالجة الدورة الافتراضية في PHP، ولكن بدلا من تخزين بيانات الجلسة في ملفات مسطحة تخزنها في قاعدة بيانات MySQL، مما يوفر أمن أفضل وأداء أفضل

  • إنه استبدال دائري وعلاج بمعالج الدورة الافتراضية في PHP: سيتم استخدام جلسات PHP بنفس طريقة استخدام المكتبة؛ لا تحتاج إلى تغيير أي رمز موجود!

  • ينفذ أقفال الصف، وضمان التعامل مع البيانات بشكل صحيح في السيناريوهات مع طلبات AJAX المتزامنة المتعددة

  • ملف واحد فقط

  • ناضجة، محسنة للغاية وتطوير باستمرار

  • وثائق جيدة جدا

يمكنك استخدام هذا في CI: الإخصاء.

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