لائحة الطعام
مجاني
تحقق في
الرئيسية  /  تعليم / حيث يتم تخزين جلسات PHP. جلسات PHP تحت Scalpel

حيث يتم تخزين جلسات PHP. جلسات PHP تحت Scalpel

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

بعد ذلك، أصبحت لحظات كثيرة أكثر وضوحا، والآلية نفسها أكثر شفافية.

سيتم دراسة الجلسات في البرنامج النصي القياسي التالي:

يعمل على النحو التالي:

كتلة 1. تقوم ميزة Session_Start () بإنشاء جلسة جديدة أو تحميل القديم، باستخدام معرف جلسة PhsessID الفريدة.

كتلة 2. إذا تمكنت من استعادة الجلسة، تزداد قيمة _Session $ ["المشاهدات"] من قبل واحد. إذا لم يكن الأمر كذلك، تتم تهيئته من قبل واحد.

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

أول تحميل البرنامج النصي

طلب رؤوس

GET / HTTP / 1.1 المضيف: FiringRange.local - وكيل المستخدم: Mozilla / 5.0 (Windows NT 5.1؛ RV: 6.0.2) Gecko / 20100101 Firefox / 6.0.2 قبول: نص / أتش تي أم أل، تطبيق / XHTML + XML، تطبيق / XML؛ Q \u003d 0.9، * / *؛ Q \u003d 0.8 قبول اللغة: ru-en، ru؛ q \u003d 0.8، en-us؛ q \u003d 0.5، en؛ q \u003d 0.3 قبول الترميز: gzip، dyplate قبول charset : Windows-1251، UTF-8؛ Q \u003d 0.7، *؛ Q \u003d 0.7 اتصال: التحكم في COUN-LIVE-SCATE: MAX-AGE \u003d 0

الردود الإجابة

http / 1.1 200 موافق التاريخ: الخميس، 29 سبتمبر 2011 20:36:15 بتوقيت جرينتش الخادم: Apache / 2.2.13 (Win32) PHP / 5.2.10 X-Powered-by: PHP / 5.2.10 Set-Cookie: phpsessid \u003d k33en6ccgcia7125mitj5te4u6؛ المسار \u003d / تنتهي صلاحيت: الخميس، 19 نوفمبر 1981 08:52:00 بتوقيت جرينتش Cache-Control: No-Store، لا ذاكرة التخزين المؤقت، يجب إعادة التدقيق، بعد الاختيار \u003d 0، تحقق مسبقا \u003d 0 Pragma: No-cache محتوى طول: 58 الحفاظ على قيد الحياة: مهلة \u003d 5، كحد أقصى \u003d 100 اتصال: الحفاظ على قيد الحياة المحتوى: Text / HTML

تعليق

في الطلب الأولي، لم يحدد المتصفح نفسه بأي طريقة، وبالتالي فإن الآلية جلسات PHP. ولدت معرف جلسة فريد جديد وقائد المتصفح لإنشاء حفنة يتم فيها تخزين هذا المعرف للغاية.

خادم جانبي

نتيجة البرنامج النصي على جانب الخادم، يتم إنشاء Sess_k33en6ccgcia7125mitj5te4u6 من المحتوى التالي:

جانب العميل

على جانب العميل، يتم إنشاء طباخ Phpsessid، حيث يتم تخزين قيمة المعرف الفريد للجلسة.

ملحوظة. ل إعدادات PHP. بشكل افتراضي، عمر طهي Phpsessid - حتى يتم إغلاق المتصفح. أولئك. بمجرد إغلاق المتصفح، سيتم حذف Cook، وسيتم فقد الجلسة وفقا لذلك. يمكن تغيير مدى حياة ملف تعريف الارتباط Phpsessid عن طريق تغيير قيمة Session.cookie_lifetime.

نتيجة عمل البرنامج النصي

التحميل الثاني سيناريو

طلب رؤوس

الحصول على / http / 1.1 المضيف: firingrange.local وكيل المستخدم: Mozilla / 5.0 (Windows NT 5.1؛ RV: 6.0.2) Gecko / 20100101 Firefox / 6.0.2 تقبل: النص / HTML، والتطبيق / XHTML + XML، والتطبيق / XML؛ Q \u003d 0.9، * / *؛ Q \u003d 0.8 قبول اللغة: ru-en، ru؛ q \u003d 0.8، en-us؛ q \u003d 0.5، en؛ q \u003d 0.3 قبول الترميز: Gzip، فرط قبول المجدد: Windows-1251، UTF-8؛ Q \u003d 0.7، *؛ Q \u003d 0.7 اتصال: كوكي الإبقاء على قيد الحياة: phpsessid \u003d k33en6ccgcia7125mitj5te4u6 cache-control: max-there \u003d 0

الردود الإجابة

HTTP / 1.1 200 OK تاريخ: الخميس، 29 سبتمبر 2011 20:49:41 GMT Server: Apache / 2.2.13 (WIN32) PHP / 5.2.10 X-Powered-by: PHP / 5.2.10 انتهاء الصلاحية: الخميس، 19 نوفمبر 1981 08:52:00 GMT Cache-Control-Control: No-Store، لا ذاكرة التخزين المؤقت، Revalidate، بعد الاختيار \u003d 0، تحقق مسبقا \u003d 0 Pragma: No-Cache Content-Light 5، كحد أقصى \u003d 100 اتصال: الحفاظ على قيد الحياة المحتوى: نص / أتش تي أم أل

تعليق

يرسل المستعرض خادم ويب PHPSESSESSID باستخدام PHP تهيئة صفيف $ _sessions مع قيم من ملف Sess_k33en6ccgcia7125mitj5te4u6. وفقا لذلك، في Block 2 يعمل خارج فرع if (مباشرة).

خادم جانبي

نتيجة تشغيل البرنامج النصي، تتغير محتويات ملف Sess_K333N6CCCGCIA7125MitJ5T4U6:

جانب العميل

لا يتغير العميل على العميل.

نتيجة عمل البرنامج النصي

ماذا بعد؟

التنزيلات اللاحقة من الصفحة قبل إغلاق المتصفح ستعمل عن طريق القياس مع كيفية عمل التحميل الثاني من البرنامج النصي.

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

ومع ذلك، يمكنك العودة إلى الجلسة المحفوظة، إذا قمت بتحديد PhsessID بشكل صريح كمعلمة البرنامج النصي:

العودة إلى الجلسة مشروطة تماما، ل نتيجة تشغيل البرنامج النصي في هذه الحالة، لا يتم إنشاء كوك. رؤوس استجابة الخادم:

HTTP / 1.1 200 OK تاريخ: الخميس، 29 سبتمبر 2011 21:01:52 GMT Server: Apache / 2.2.13 (WIN32) PHP / 5.2.10 X-Powered-by: PHP / 5.2.10 انتهاء الصلاحية: الخميس، 19 نوفمبر 1981 08:52:00 GMT Cache-Control-Control: No-Store، لا ذاكرة التخزين المؤقت، Revalidate، بعد الاختيار \u003d 0، تحقق مسبقا \u003d 0 Pragma: No-Cache Content-Light 5، كحد أقصى \u003d 100 اتصال: الحفاظ على قيد الحياة المحتوى: نص / أتش تي أم أل

أولئك. للحفاظ على العمل، من خلال هذه الجلسة إلى جميع الروابط التي تعزى إلى؟ pppsessid \u003d k33en6ccgcia7125mitj5te4u6.

ملحوظة. يمكنك تحديد PHP بحيث يتم نقل معرف الجلسة الفريد فقط من خلال الطهي. للقيام بذلك، قم بتثبيت Session.use_only_cookies في القيمة 1. في هذه الحالة، فإن الخدعة، التي تظهر أعلاه، لن تمر.

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

استبيان صغير (أسئلة وأجوبة)

أين يتم تخزين بيانات الجلسة جسديا؟

يتم تخزين بيانات الجلسة على الخادم. بشكل افتراضي، يتم تسجيلها في الملفات، ولكن يمكنك تحديد آلية تخزين بيانات الجلسة الخاصة بك (على سبيل المثال، باستخدام قاعدة بيانات). إذا كنت تريد التفاصيل، راجع ميزة Session_set_save_handler.

من يولد معرف جلسة فريد؟

يقوم معرف جلسة فريد (Phpsessid) بإنشاء خادم.

هل من الممكن كتابة آلية الخاصة بك من جلسات؟

نعم، من الممكن تماما. كما ترون، لا تستخدم PHP أي شيء خارق للطبيعة - يتم حفظ المعرف بين الطلبات مع طباخ، يتم تخزين بيانات الجلسات في الملفات الموجودة على الخادم.

على سبيل المثال، فإن آلية العمل الخاصة بها مع الجلسات هي في Codeigniter الإطار الشعبي.

ما مدى أمان آلية الدورات؟

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

تزود دفاع إضافي سيكون لديك لك. على سبيل المثال:

  • يمكنك حفظ في بيانات جلسة IP وعميل وكيل المستخدم (سيتم تخزينها على جانب الخادم)، ثم في كل مقبض، من الضروري التحقق من أن القيم الحالية تزامضة مع المحفوظة. في هذه الحالة، يجب عليك البحث عن حل وسط بين أمن المستخدم وراحة المستخدم.

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

    وبالمثل، قد تختلف سلسلة وكيل المستخدم عند تحديث إصدار المتصفح أو عند تثبيت بعض الإضافات.

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

    ملحوظة.إذا كنت تعتقد أن النقاش على الموقع الرسمي، فعندئذ عند إعادة إنشاء معرف، يمكن أن تنشأ المشكلات بالوصول الموازي إلى البيانات.

جلسات العمل مع إعادة توليد المعرف في السياق

النصي


// كتلة 1.
session_start ()؛
إذا(isset.($ _session ["بدأ"]))
session_regenerate_id ()؛
آخر.
$ _session ["بدأ"] \u003d حقيقي.;

// كتلة 2.
إذا(isset.($ _session ["وجهات النظر"]))
$ _session ["وجهات النظر"] ++؛
آخر.
$ _session ["وجهات النظر"] \u003d 1؛

// كتلة 3.
صدى صوت."
< body>
عدد المشاهدات: ". $ _session [" وجهات النظر "]."

" ;

?>

كما أعرف بالفعل، بروتوكول HTTP يسمح بتطبيقات الويب لتثبيت "جلسات" - حوار بين العميل والخادم، ويتم حفظ حالة هذا الحوار من طلب الطلب.

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

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

في الواقع، فإن الإجراء الوحيد الذي يجب اتخاذها في برنامج PHP بحيث تتمثل تروس آلية الجلسات الملتوية في الاتصال بوظيفة واحدة فقط: Session_Start (). هذه الميزة تجعل جميع الإجراءات اللازمة:

  • يتحقق ما إذا كان العميل لم يرسل عدد الجلسة الموجودة بالفعل في ملف تعريف الارتباط أو في معلمات الطلب. إذا أرسل العميل رقم الجلسة، فسيتم تحميل بيانات هذه الجلسة من موقع التخزين المستمر (على سبيل المثال، الملف) إلى الذاكرة، ويصبح البرنامج متاحا من خلال مجموعة من $ _Session. إذا لم يتم إرسال العميل رقم الجلسة أو عدم وجود مثل هذه الجلسة غير موجودة على الخادم - يتم إنشاء جلسة جديدة برقم جديد، وتتوفر بياناتها أيضا من خلال صفيف $ _Session، والتي في حالة جلسة جديدة سيكون فارغا. يتم وضع عدد الجلسة التي تم إنشاؤها حديثا في رأس استجابة Set-Cookie Server.
  • يوفر حفظ بيانات الجلسة. بعد أن قام برنامج PHP بمعالجة الطلب، الوضع الحالي يتم تخزين صفيف $ _Session في موقع التخزين المستمر مرة أخرى متاحا مرة أخرى في طلب العميل التالي.

الآن، معرفة التفاصيل المخفية للدورة_START ()، يمكننا اللعب مع هذه الآلية. المثال أدناه يخزن رقم واحد في الجلسة، مما يزيد من قبل واحد مع كل طلب عميل:

عند إدخال هذه الصفحة لأول مرة، سيرسل الخادم متصفح حفنة برقم الجلسة:

تعيين ملف تعريف الارتباط.: psyssid \u003d 4ftvca7jmmnm04q95r3sdsk6r6؛ المسار \u003d /

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

مثال أكثر واقعية: تسجيل دخول المستخدم

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

صفيف (كلمة المرور "\u003d\u003e" 123 "،" العنوان "\u003d\u003e" المسؤول "،)،" مستخدم "\u003d\u003e صفيف (" كلمة المرور "\u003d\u003e" QWE "،" العنوان "\u003d\u003e" User "،)،) ؛ عودة isset (USER USER [د $ تسجيل الدخول])؟ مستخدمي US [$ تسجيل الدخول]: NULL؛ ) الدالة GetCurrentUser () (USER المستخدم \u003d ISSET (جلسة $ _ ["المستخدم" ["المستخدم" ["المستخدم"])؟ $ _session ["user"]: null؛ العودة $ مستخدم المستخدم؛) وظيفة setcurrentuser ($ المستخدم) ($ _session ["_session [" المستخدم "] \u003d مستخدم $؛)؟

مرحبا،!
Link1 المرجع 2.

اذهب للخارج لم تقم بزيارة الموقع. أدخل تسجيل الدخول وكلمة المرور:
تسجيل الدخول: كلمة المرور:

يطلب هذا البرنامج تسجيل دخول وكلمة مرور، ويمكنك تسجيل الدخول باستخدام تسجيل الدخول المستعمل., qWE. أو مشرف., 123 وبعد يعرض المستخدم المتعاوني تحية. تعرض الرسالة الرسالة إذا كان اسم المستخدم أو كلمة المرور غير صحيحة.

بمجرد أن كان من الممكن الذهاب إلى هذا "الموقع"، يمكنك بطة من خلال الروابط (Link1، Reference2)، في حين تبقى مستخدم غير مسجل.

ما البيانات التي يمكن تخزينها في جلسات؟

بواسطة pHP الافتراضي. تخزن بيانات الجلسة في ملف مؤقت كنص. في هذا، يمكنك التأكد من النظر في الدليل مؤقتا ملفات phpوبعد تم تحديد هذا الدليل في Phpinfo () في البيئة، TEMP. في هذا الدليل ستجد ملفات Spec_ 4ftvca7jmmnm04q95r3sdsk6r6.حيث 4ftvca7jmmnm04q95r3sdsk6r6 هو رقم جلسة تم إرسالها إلى ملف تعريف الارتباط. إلقاء نظرة على هذا الملف: إذا بدأت المثال الأول أعلاه، فسيتم اكتشاف الملف بواسطة المحتويات تقريبا: "القيمة | الأول: 2؛". هذا النص هو عرض متسلسل لمحتويات الجلسة، حيث يتم تخزين متغير واحد فقط مع الرقم.

جميع القيم التي تضعها برنامج PHP في جلسة من خلال صفيف _Session $، عند حفظ الجلسة، تتحول إلى أنواع نصية، ثم سجلت في الملف. تسمى عملية تحويل المتغيرات في النص "التسلسل". وبالتالي، في الجلسة، يمكن وضع أي بيانات يمكن php التسلسل.

لحسن الحظ، في Serialize PHP ليس فقط القيم البسيطة يبدو أن الأرقام والخطوط، ولكن أيضا هياكل معقدة مثل المصفوفات والأشياء:

"؛ print_r (جلسة $ _)؛ صدى""$ _session [" testhray "] \u003d صفيف (1، 2، 3،" واحد "،" اثنين "،" ثلاثة "،" الطفل "\u003d\u003e صفيف (5، 6، 7)،)؛ $ obj \u003d new stglass ()؛ $ obj-\u003e x \u003d 1234؛ $ obj-\u003e y \u003d 4567؛ $ _session ["testobject"] \u003d $ obj؛

سيقوم هذا المثال بتسجيل مثل هذه البيانات إلى ملف الجلسة:

Testarray | A: 7: (i: 0؛ i: 1؛ i: 1؛ i: 2؛ i: 2؛ i: 3؛ i: 3؛ s: 3: "واحد"؛ i: 4؛ s: 3 : "اثنان"؛ أنا: 5؛ S: 5: "ثلاثة"؛ S: 5: "الطفل"؛ ج: 3: (الأول: 0؛ أنا: 5؛ أنا: 1؛ أنا: 6؛ أنا: 2؛ i: 7؛)) testobject | o: 8: "stdclass": 2: (S: 1: "x"؛ i: 1234؛ s: 1: "y"؛ i: 4567؛)

تخزين الكائنات في الجلسة

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

عندما يتم حفظ الكائنات، هناك حالات حيث يكون التسلسل القياسي للكائن لسبب ما غير مقبول أو غير ممكن. في مثل هذه الحالات، من الممكن تنفيذ التسلسل من خلال الإعلان يدويا بإعلان الأساليب "السحرية" __sleep () و __Wake () في الفصل.

بالمناسبة، يمكن تنفيذ التسلسل و "يدويا"، وليس من الضروري حفظ / تنزيل بيانات الجلسة. قد تكون هناك حاجة عند حفظ بعض البيانات في التطبيق للاستخدام لاحقا، أو نقل عبر الشبكة. الوظائف التي يمكن أن تكون مفيدة عند التسلسل / التحيز - تسلسل ()، غير قانوني ()، json_encode ()، json_decode ().

ما لا يمكن تخزينه في الجلسة؟

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

ميزات إضافية

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

لتسريع عملية حفظ وتنزيل بيانات الجلسة على المواقع المحملة للغاية، يمكن استخدام الخادم Memcacached، الذي يخزن البيانات في الذاكرة. تم تصميم دعم طريقة تخزين الجلسة هذه في PHP وتكوينها من خلال ملف تكوين PHP.INI.

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

تتوفر هذه والخيارات الأخرى الأخرى لإعداد جلسات HTTP في PHP من خلال وظائف Session_ *.

يتم حفظ جلسات في PHP أو كبيانات حول المستخدم الذي جاء إلى الموقع أو المشتري عند التحرك بين صفحات الموقع دون صعوبة كبيرة. الدرس مهم جدا. ذات الصلة لإنشاء 95٪ من المواقع.

ما هي الجلسة في PHP

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

منطق الجلسة

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

مثال على العمل
1. يدخل المستخدم تسجيل الدخول وكلمة المرور ويأتي إلى الموقع
2. يتم حفظ البيانات مع تسجيل الدخول وكلمة المرور في جلسة واحدة من صفحات الموقع:

ملف index.php.

session_start ()؛ // كل ملف تريد استخدام هذه الجلسات يجب أن يحتوي في بداية التعليمات البرمجية على أمر "بدء الجلسة"

$ تسجيل الدخول \u003d "المسؤول"؛
$ كلمة المرور \u003d "تمرير"؛
$ _session ["تسجيل الدخول"] \u003d تسجيل الدخول $؛ / / احفظ المتغير يحتوي على تسجيل الدخول
$ _session [كلمة المرور "] \u003d $ كلمة المرور؛ // حفظ المتغير يحتوي كلمة المرور

3. عند الذهاب إلى صفحة أخرى من الموقع، ستكون هذه البيانات متاحة أيضا:

ملف مثال على ذلك. (أو أي صفحة أخرى)

صدى "تسجيل الدخول". جلسة $ _ ["تسجيل الدخول"]؛ // سوف خارج "مسؤول تسجيل الدخول الخاص بك"، على الرغم من أننا في هذه الصفحة لم نكتب البيانات!
انظر، كل شيء بسيط!

4. إذا كنت ترغب في مسح بيانات الجلسة، فعد:

ملف مثال على ذلك.

session_start ()؛ / / قم بتشغيل الجلسة مرة أخرى

UNSET (جلسة $ _ ["تسجيل الدخول"])؛ // غير المسجلة المتغير أو "دمرت"
صدى "تسجيل الدخول". جلسة $ _ ["تسجيل الدخول"]؛ // سوف خارج "تسجيل الدخول الخاص بك". منذ أن دمرت ذلك في السطر الأخير، فلا توجد بيانات

session_destroy ()؛ / / تدمير الجلسة. جميع البيانات، بما في ذلك $ _session [كلمة المرور "] لم تعد. عندما يتم الاستعلام سيظهر خطأ
بشكل عام، يشبه هذا الإرسال طريقة النشر، ولكن فقط يجب عليك كتابة الكثير من التعليمات البرمجية الزائدة، ولكن يتم تخزين جميع البيانات المرسلة من الصفحة إلى الصفحة في ملفات مؤقتة على الخادم. أكرر الجلسات يجب أن تحتوي على كميات صغيرة من البيانات، لذلك فهي مناسبة لتخزين تسجيل الدخول / كلمة المرور، وسلة المشتري وحدات التخزين الصغيرة الأخرى.

نقل القيم أو الصفيف باستخدام جلسة PHP

في الجلسة، يمكنك تسجيل ليس فقط السلسلة، ولكن أيضا مجموعة من البيانات. فقط لا تبالغ فيه بحجم الصفيف، لأن كل هذا سيؤثر على المساحة الصيام والمشغل على الخادم.

نستخدم مرة أخرى بعض الصفحة البدء index.php.

session_start ()؛

$ r \u003d صفيف ("واحد"، "اثنين"، "ثلاثة")؛

$ _session ["arr"] \u003d $ r؛

في الصفحة التي سيتم عرض كل شيء
احفظ البيانات في جلسات وانتقل الرابط إلى صفحة أخرى، حيث ستكون جميع البيانات إخراج.

مستلم الملفات، الصفحة test.php. حيث نفتح مجموعة

session_start ()؛
print_r (جلسة $ _ ["arr"])؛
// إزالة
/*
مجموعة مصفوفة.
\u003d\u003e واحد.
\u003d\u003e اثنان.
\u003d\u003e ثلاثة.
*/
?>
قد ترغب في تحديث الدرس في الذاكرة. بشكل عام، يجب أن يكون كل شيء واضحا.

ميزات أخرى للعمل مع جلسات

session_unregister (سلسلة) - تنسى الجلسة قيمة متغير عالمي معين؛
session_destroy () - يتم تدمير الجلسة (على سبيل المثال، إذا غادر المستخدم النظام عن طريق الضغط على زر الإخراج)؛
session_set_cookie_params (العمر الدولي [، مسار السلسلة [، مجال السلسلة]]) - مع هذه الميزة، يمكنك تثبيت المدة التي ستعيش فيها الجلسة، مما يؤدي إلى تعيين UNIX_TIMESTAMP الذي يحدد وقت الموت في الجلسة.

قائمة ميزات للعمل مع جلسات (جلسة) في PHP
session_cache_expire - إرجاع نهاية عمل ذاكرة التخزين المؤقت الحالية
session_cache_limiter - يحصل و / أو مجموعات Cashel Cashet المحدد
Session_Commit - Alias \u200b\u200bSession_Write_Close ()
Session_Decode - Decodes Data Data من الخط
session_destroy - يدمر جميع البيانات المسجلة للجلسة
session_encode - تشفير بيانات الجلسة الحالية كسلسلة
session_get_cookie_params - يحصل على جلسة إعدادات طبخ
Session_id - يحصل و / أو يحدد معرف الجلسة الحالية
Session_is_IceDeded - يحدد ما إذا كان المتغير مسجلا في الجلسة
session_module_name - يحصل و / أو تعيين وحدة الجلسة الحالية
session_name - يحصل و / أو تعيين اسم الجلسة الحالية
session_regenerate_id - يعدل معرف الجلسة الحالية التي تم إنشاؤها مؤخرا
Session_register - يسجل أحد المتغيرات أو أكثر للجلسة الحالية.
session_save_path - يحصل و / أو تعيين مسار حفظ الجلسة الحالية
session_set_cookie_params - يضبط معلمات جلسة الطبخ
session_set_save_handler - يضبط ميزات التخزين في جلسة مستوى المستخدم
session_start - تهيئة بيانات الجلسة
session_unregister - تعليل متغير من الجلسة الحالية
session_unset - يحرر كل دورة المتغيرات
session_write_close - يكتب بيانات الجلسة ودورة النهاية

أمثلة على الدورات

عرض الصفحة عداد أثناء الجلسة. مثال VITE. ومع ذلك، بعد إغلاق المتصفح، سيبدأ العد التنازلي مرة أخرى.

بعض الصفحات تزور متر كجزء من جلسة واحدة

/ / مثال بسيط لاستخدام جلسات دون ملفات تعريف الارتباط.
session_name ("اختبار")؛
session_start ()؛
$ _Session ["عدد"] \u003d @ $ _ الجلسة ["عدد"] + 1؛
?>

عداد


في جلسة العمل الحالية مع المتصفح، فتحت هذه الصفحة.
مرة).
أغلق المتصفح لإعادة ضبط هذا العداد.
انقر هنا لتحديث الصفحة!
في كل انتقال، سيزداد العداد بنسبة 1)

شكرا للاهتمام! حظا سعيدا في المساعي!

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

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

تشبه الجلسات في PHP إلى ملف تعريف الارتباط، نفس الأزواج هي المفتاح \u003d\u003e القيمة، فقط يتم تخزينها على جانب الخادم.

session_start ()

جلسة نحتاج إلى البدء، لذلك هناك وظيفة Session_Start (). تبدأ هذه الميزة جلسة، أو جلسة كما يمكنك الاتصال به.

وظيفة Session_Start () أمر مرغوب فيه بالاسترداد في بداية الصفحة، ولكن في أمثلةي لا أفعل هذا.

صفيف $ _session.

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

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

على الخادم، يتم تخزين بيانات الجلسة في ملف نصي. وهي متوفرة في برنامج PHP في صفيف $ _Session. للحفاظ على المتغير في الجلسة، تحتاج إلى تعيين قيمة في هذه الصفيف.

دعونا نبدأ في النهاية في استخدام الأمثلة. كل شيء بسيط جدا.

جلسات في فب. القيمة. "؛\u003e

الآن دعونا نحاول الحصول على قيمة من صفيف $ _session في مثال آخر.

جلسات في فب.

ملاحظة، إذا كانت في المثال الثاني، نحذف الدالة Session_Start ()، فلن نتمكن من الوصول إلى بيانات صفيف $ _Session.

معرف جلسة العمل ()

بعد إنشاء الجلسة، يمكنك تلقائيا الوصول إلى معرف الجلسة الفريد باستخدام الدالة Session_ID (). تتيح لك هذه الميزة تحديد قيمة معرف الجلسة واستلامها.

جلسات في فب.

يمكنك البحث في شريط الأدوات لمطوري المتصفح الخاص بك (في Chrome للقيام بذلك، اضغط CTRL + SHIFT + I، ثم الموارد، وسوف أجد ملف تعريف ارتباط)، ووضع هذا المجال متصفح ملف تعريف الارتباط الخاص بك مع اسم Phsessid وحوالي هذه القيمة تقريبا: "7g5df9rkd1hhvr33lq1k6c72p7".

وفقا للقيمة PHPSESSID التي ستحدد متصفحك وتعمل مع المجموعة المقابلة من المتغيرات التي ستكون متاحة البرنامج النصي من خلال صفيف $ _ssession، كما هو مكتوب سابقا.

وظيفة SEلة_NAME ()

إذا تتيح لك وظائف Session_id () الحصول على قيمة معرف الجلسة، فإن دالة Session_name () تتيح لك معرفة اسم الجلسة.

جلسات في فب.

مرة أخرى حول الدقة Session_start ()

الآن نحن نعرف المزيد عن ProZhanism للجلسات في PHP وتحتاج إلى العودة إلى الدورة Session_Start () وظيفة مرة أخرى. تهيئة هذه الميزة آلية الجلسة للمستخدم الحالي. كيف يحدث هذا بالضبط:

  • إذا أطلق المستخدم الموقع لأول مرة، تقوم Session_Start () بتعيين ملف تعريف الارتباط من العميل وإنشاء تخزين مؤقت على الخادم المرتبط بمعرف المستخدم.
  • يحدد المستودع المرتبط بالمعرف الحالي المرسلة.
  • إذا كانت هناك بيانات في المستودع على الخادم، فسيتم وضعها في صفيف $ _Session.
  • إذا تم تشغيل Register_Globals من ملف PHP.INI، فسيتم تحويل جميع عناصر صفيف $ _session إلى المتغيرات العالمية.

مثال على استخدام الجلسة

الآن سننظر إلى مثال سوف يسمح بتجارب طفيفة مع جلسات.

جلسات في فب.

عداد

في الجلسة الحالية، فتحت صفحة زمن.

افتح مثالا في "\u003e علامة التبويب هذه.

يعتمد كل عمل الجلسات على مجموعة _Session $، فمن الواضح أن ذلك ينظر إليه في هذا المثال.

إذا قمت بإغلاق نافذة المتصفح، فسوف تتوقف الجلسة، وسيتم إعادة ضبط عدادنا. يمكن تغيير هذا السلوك من الجلسات في PHP، وسنعود إلى هذه المسألة مزيدا من القليل في المقال.

الانتهاء من الجلسة

من أجل إكمال الجلسة، نحتاج:

  1. مسح مجموعة _session $.
  2. حذف التخزين المؤقت على الخادم.
  3. حذف ملف تعريف ارتباط الجلسة.

مسح $ _ssession $ يمكن أن يستخدم وظيفة Session_unset ().

تتم حذف ميزة Session_destroy () التخزين المؤقت على الخادم. بالمناسبة، لا تفعل شيئا أكثر.

تحتاج إلى حذف ملف تعريف ارتباط جلسة باستخدام وظيفة SetCookie ()، والتي درسناها في استوديو مع ملف تعريف الارتباط في PHP.

مثال على الانتهاء من الجلسة:

الانتهاء من الجلسة

اكتمال الجلسة.

الآن يمكنك إجراء تجربة: قم بتشغيل مثال على عداد في نافذة واحدة، والرياح العداد، ثم قم بتشغيل مثال حذف الجلسة وتجديد الصفحة بالمتر.

إزالة ملف ملفات تعريف الارتباط يمكن القيام به مثل هذا:

setcookie (session_name ()، "،" الوقت () - 60 * 60 * 24 * 32، "/")

مرة أخرى حول وظائف Session_name () و Session_id ()

وظائف Session_name () و Session_id () نادرة في الممارسة العملية، لكنني أكتب إليهم، لأن المقال بحاجة إلى الكشف عن آلية تشغيل الدورات في فب.

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

جلسات في فب.

عند استخدام هذا المثال، سيتم تعيين جميع المستخدمين في نفس معرف الجلسة.

سنوقف المزيد من التفاصيل إذا بدأت مثالا من القسم حول دالة Session_name () (هنا هو الرابط) في متصفحات مختلفة (على سبيل المثال، في Chrome and Internet Explorer)، عند كل متصفح له جلسة فريدة من نوعها معرف. تقوم المتصفحات بتخزين ملفات تعريف الارتباط في كل مجلدها، بحيث ستمنح وظيفة Session_Start () كل متصفح لإنشاء معرفك الفريد الخاص بك، وبالتالي، سيتم إنشاء كل متصفح تخزين فريد من نوعه على الخادم. لذلك، فإن مثالا مع متر (هذا) في كل متصفح سيعمل بشكل مستقل عن بعضها البعض.

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

100) (session_unset ()؛ session_destroy ()؛)؟ جلسات في فب.

العداد رقم 2.

فتح الصفحة في متصفحات مختلفة زمن.

افتح مثالا في "\u003e علامة التبويب هذه.

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

وضع وقت الانتظار

بشكل افتراضي، فإن الجلسة "تعيش" حتى يغلق الزائر نافذة المتصفح. هذا يرجع إلى حقيقة أن وظيفة Session_Start () تكمن مع العميل مثل ملف تعريف الارتباط.

يمكن تغيير مدى الحياة من الدورة باستخدام وظيفة الدالة Session_set_cookie_params ()، إليك بناء جملةها.

session_set_cookie_params (العمر الدولي [، مسار سلسلة [، مجال السلسلة [، bool secure]]]))))

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

يتم تطبيق الدالة Session_set_cookie_params () فقط لفترة النصية.

هنا مثال على استخدام هذه الميزة:

جلسات في فب.

العداد رقم 3.

قيمة مضادة:.

فتح متر في "\u003e علامة التبويب هذه.

المسمار العداد وإغلاق المتصفح، بعد 30 Sukund مرة أخرى، افتح هذا المثال. سوف تستمر جلستك.