تصميم موقع الويب الخاص بك مع PHP و MySQL


الدرس: الجلسة SESSION & وملفات تعريف الارتباط COOKIES


الصفحة السابقة

الجلسات SESSION


الجلسات هي وسيلة للحفاظ على المتغيرات في جميع صفحات موقعك. حتى الآن ، تمكنا من تمرير المتغيرات من صفحة إلى أخرى عبر الطريقة   GET  (عن طريق تعديل عنوان URL )   page.php?variable=value وعبر الطريقة   POST  (باستخدام نموذج) .
لكن تخيل الآن أنك تريد تمرير المتغيرات على جميع صفحات موقعك طوال فترة وجود زائر. فإنه لن يكون من السهل مع   GET  و   POST  لأنها مصنوعة بالأحرى لنقل المعلومات مرة واحدة فقط، من صفحة إلى أخرى. نحن نعرف كيفية إرسال الاسم الأول والأخير للزائر من صفحة إلى أخرى ، ولكن بمجرد تحميل صفحة أخرى ، يتم "نسيان" هذه المعلومات. لهذا اخترعنا الجلسات.
كيف تعمل الجلسات
كيف تتم إدارة الجلسات في PHP؟ فيما يلي الخطوات الثلاث التي يجب معرفتها.
  1. يصل زائر إلى موقعك. نطلب إنشاء جلسة له. PHP ثم يولد رقم فريد. غالبًا ما يكون هذا الرقم كبيرًا جدًا ومكتوبًا بالسداسي عشر ، على سبيل المثال: a02bbffc6198e6e0cc2715047bc3766f ( يستخدم هذا الرقم كمعرف ويسمى "معرف الجلسة" (أو   PHPSESSID  ) . يقوم PHP تلقائيًا بنقل هذا المعرف من صفحة إلى أخرى ، بشكل عام باستخدام ملف تعريف ارتباط. 
  2. بمجرد إنشاء الجلسة ، يمكننا إنشاء عدد لا نهائي من متغيرات الجلسة لاحتياجاتنا. على سبيل المثال ، يمكننا إنشاء متغير   $_SESSION['name']  يحتوي على اسم الزائر ،    $_SESSION['first_name']   يحتوي على الاسم الأول ، إلخ. يحتفظ الخادم بهذه المتغيرات حتى عند الانتهاء من إنشاء صفحة PHP . هذا يعني أنه ، أيا كانت صفحة موقعك ، يمكنك استرجاع الاسم والاسم الأول للزائر على سبيل المثال عبر   $_SESSION   !
  3. عندما يخرٌج الزائر عن موقعك ، يتم إغلاق الجلسة و "تنسى" PHP ، ثم جميع متغيرات الجلسة التي قمت بإنشائها. من الصعب في الواقع معرفة بالضبط عندما يغادر زائر موقعك. عندما يغلق متصفحه أو ينتقل إلى موقع آخر ، فلن يتم إعلامك بذلك. إما أن ينقر الزائر على زر "تسجيل الخروج" (الذي ستنشئه) قبل مغادرته ، أو ننتظر بضع دقائق من عدم النشاط لتسجيل الخروج تلقائيًا: يسمى هذا المهلة. في معظم الأحيان ، يتم قطع اتصال الزائر من خلال مهلة.
قد يبدو كل هذا معقدًا بعض الشيء ، لكنه في الواقع سهل الاستخدام. يجب أن تعرف وظيفتين:
  • session_start()  : يبدأ نظام الجلسة. إذا وصل الزائر للتو إلى الموقع ، فسيتم إنشاء رقم جلسة له. يجب استدعاء هذه الوظيفة في بداية كل صفحة من الصفحات التي تحتاج فيها إلى متغيرات الجلسة.
  •  session_destroy()  : إغلاق جلسة الزائر. يتم استدعاء هذه الوظيفة تلقائيًا عندما لا يقوم الزائر بتحميل صفحة من موقعك لعدة دقائق (هذا هو المهلة) ، ولكن يمكنك أيضًا إنشاء صفحة "تسجيل الخروج" إذا أراد الزائر تسجيل الخروج يدويًا.
يوجد فخ صغير: يجب عليك الاتصال   session_start()  بكل صفحة من صفحاتك قبل كتابة أي كود HTML (حتى قبل العلامة     ) . إذا نسيت أن تبدأ   session_start() ، فلن تكون قادرًا على الوصول إلى متغيرات superglobal   $_SESSION  .
 مثال على استخدام الجلسة
أقترح عليك أن تدرس مثالًا ملموسًا حتى تستطيع أن ترى مدى سهولة استخدامه:

<?php
// نبدأ الجلسة قبل كتابة كود HTML
session_start();

// إنشاء بعض متغيرات الجلسة في $_SESSION
$_SESSION['prenom'] = 'Jean';
$_SESSION['nom'] = 'Dupont';
$_SESSION['age'] = 24;
?>

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title> عنوان صفحتي </title>
    </head>
    <body>
    <p>
        مرحبا <?php echo $_SESSION['prenom']; ?> !<br />
        أنت في صفحة الاستقبال في موقعي هل تريد المرور الى صفحة أخرى ؟
    </p>
    <p>
        <a href="mapage.php">رابط mypage.php</a><br />
        <a href="monscript.php">رابط myscript.php</a><br />
        <a href="informations.php">رابط informations.php</a>
    </p>
    </body>
</html>
web dynamique php
جلسات
لا تخطئ في ذلك: يمكنك إنشاء متغيرات جلسة في أي مكان في التعليمات البرمجية (وليس فقط في البداية كما فعلت هنا). الشيء الوحيد الذي يهم هو أنه   session_start()  يتم وضعها في بداية الصفحة. 
كما ترون ، لقد قمت بإنشاء ثلاثة متغيرات جلسة والتي تحتوي على اسم الزائر ، الاسم الأول والعمر هنا.
قمت أيضًا بإنشاء روابط إلى صفحات أخرى من موقعي. لاحظ شيئًا مهمًا جدًا: هذه الارتباطات بسيطة جدًا ولا تنقل أي معلومات. لا أهتم بأي شيء: لا لنقل الاسم أو الاسم الأول أو عمر الزائر ، أو إرسال معرف الجلسة. PHP يعالج كل شيء بالنسبة لنا.
الآن ، في جميع صفحات موقعي (بالطبع ، سوف تضطر إلى بدء تشغيل نظام الجلسة على جميع الصفحات به   session_start() ) ، يمكنك استخدام المتغيرات إذا كنت ترغب في ذلك   $_SESSION['prenom'] ،    $_SESSION['nom']   و   $_SESSION['age']  !
 فيما يلي على سبيل المثال الكود المصدري للصفحة   informations.php  :

<?php
session_start(); // On démarre la session AVANT toute chose
?>

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title>عنوان صفحتي</title>
    </head>
    <body>
    <p>مرحبا مجددا !</p>
    <p>
        أعرف اسمك إسمك <?php echo $_SESSION['prenom'] . ' ' . $_SESSION['nom']; ?> !<br />
        و عمرك امممممممممم ؟<?php echo $_SESSION['age']; ?>عاما أليس كذلك  
    </p>
    </body>
</html>
كما ترى؟ لقد بدأنا الجلسة بـ session_start()  ، ثم عرضنا قيم متغيرات الجلسة.
وهناك ، السحر!
تم الحفاظ على قيم المتغيرات ، لم يكن لدينا شيء نفعله!
باختصار ، يمكننا إنشاء متغيرات الجلسة أثناء قيامنا بإنشاء متغيرات كلاسيكية ، شريطة أن نكتبها في الصفيف $_SESSION   وأننا    قد أطلقنا الجلسة معها   session_start()  . وبالتالي يتم الاحتفاظ بهذه المتغيرات من صفحة إلى أخرى لكامل مدة وجود زائرك.
إذا كنت ترغب في تدمير جلسة الزائر يدويًا ، يمكنك إنشاء رابط "تسجيل الخروج" يؤدي إلى صفحة تستخدم الوظيفة   session_destroy()  . ومع ذلك ، كن على علم أنه سيتم تدمير الجلسة تلقائيًا بعد فترة معينة من عدم النشاط.
فائدة الجلسات في الممارسة العملية
بشكل ملموس ، يمكن استخدام الجلسات في العديد من الحالات على موقعك (وليس فقط لتذكر الاسم والاسم الأول!). هذه بعض الأمثلة :
  • تخيل برنامج نصي يطلب تسجيل الدخول وكلمة المرور بحيث يمكن للزائر "الاتصال" (المصادقة). يمكننا حفظ هذه المعلومات في متغيرات الجلسة وتذكر معرف الزائر في جميع صفحات الموقع!
  • نظرًا لأننا نتذكر تسجيل الدخول الخاص بنا ويتم إنشاء متغير الجلسة فقط إذا تمت المصادقة بنجاح ، فيمكننا استخدامه لتقييد صفحات معينة من موقعنا على زائرين معينين فقط. يؤدي هذا إلى إنشاء منطقة إدارة آمنة بالكامل: في حالة وجود متغير جلسة تسجيل الدخول ، يتم عرض المحتوى ، وإلا يتم عرض خطأ. يجب أن يذكرك هذا بـ "صفحة محمية بكلمة مرور" TP ، باستثناء أنه يمكننا هنا استخدام الجلسات لحماية عدة صفحات تلقائيًا.
  • يتم استخدام الجلسات بنشاط على مواقع المبيعات عبر الإنترنت. هذا يجعل من الممكن إدارة "سلة": نحتفظ بالمنتجات التي يطلبها العميل بغض النظر عن الصفحة التي يوجد بها. عندما يتحقق من صحة أمره ، نجمع هذه المعلومات و ... نفرض رسومًا عليه.
إذا كان Free.fr يستضيف موقعك ، فستحتاج إلى إنشاء مجلد باسم "الجلسات" في جذر FTP الخاص بك لتنشيط الجلسات.

ملفات تعريف الارتباط COOKIES


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

في بعض الأحيان يكون لملفات تعريف الارتباط صورة سيئة. غالبًا ما نقع في خطأ التفكير في أن ملفات تعريف الارتباط "خطيرة". لا ، إنها ليست فيروسات ، إنها ملفات نصية صغيرة تحتوي على معلومات. في أسوأ الأحوال ، قد يتذكر موقع التاجر أنك تحب الكاميرات الرقمية وتعرض فقط الإعلانات الخاصة بالكاميرات ، ولكن هذا كل شيء ، فهذه الملفات الصغيرة ليست ضارة بجهاز الكمبيوتر الخاص بك.
عادةً ما يخزن كل ملف تعريف ارتباط قطعة واحدة من المعلومات في وقت واحد. إذا كنت تريد تخزين اسم مستعار الزائر وتاريخ الميلاد ، فمن المستحسن إنشاء ملفي تعريف ارتباط.
أين يتم تخزين ملفات تعريف الارتباط على القرص الصلب الخاص بي؟
ذلك يعتمد على متصفح الويب الخاص بك. بشكل عام ، لا يتم لمس هذه الملفات مباشرةً ، ولكن يمكن عرض قائمة ملفات تعريف الارتباط المخزنة داخل المتصفح. يمكنك اختيار حذفها في أي وقت.
إذا كان لديك Mozilla Firefox ، فيمكنك الانتقال إلى القائمة   Tools / Options / Private  والنقر فوق   Delete specific cookies  . تحصل على قائمة وقيمة جميع ملفات تعريف الارتباط المخزنة ، كما في الشكل التالي.
web dynamique php
ملفات تعريف الارتباط Firefox
 يتم تصنيف ملفات تعريف الارتباط حسب الموقع. يمكن لكل موقع أن يكتب ، كما ترون ، العديد من ملفات تعريف الارتباط. كل واحد منهم لديه اسم وقيمة (والتي يمكنك أن ترى على السطر   Contenu  في الشكل التالي). ستلاحظ أنه مثل أي ملف تعريف ارتباط يحترم نفسه ، لكل منها تاريخ انتهاء صلاحية. بعد هذا التاريخ ، لم يعد الطعام جيدًا ؛ حيث يتم حذفه تلقائيًا بواسطة المتصفح.
ملفات تعريف الارتباط هي بالتالي معلومات مؤقتة يتم تخزينها على أجهزة كمبيوتر الزوار. يقتصر الحجم على عدد قليل من الكيلوبايت: لا يمكنك تخزين الكثير من المعلومات في وقت واحد ، لكنها عادةً كافية.
اكتب ملف تعريف الارتباط
مثل متغير ، ملف تعريف الارتباط له اسم وقيمة. على سبيل المثال ، سيكون لملف تعريف الارتباط الزائف قيمة بالنسبة لي   M@teo21  .
لكتابة ملف تعريف ارتباط ، نستخدم وظيفة PHP   setcookie   (والتي تعني "وضع ملف تعريف ارتباط" باللغة الإنجليزية) .
يعطى بشكل عام ثلاثة مٌدخلات ، بالترتيب التالي:
  1. اسم ملف تعريف الارتباط (على سبيل المثال :    pseudo ) ؛
  2. قيمة ملف تعريف الارتباط (على سبيل المثال :   M@teo21 )
  3. تاريخ انتهاء صلاحية ملف تعريف الارتباط ، في شكل طابع زمني (مثل :   1090521508 ) .
المٌدخل المقابل لتاريخ انتهاء الصلاحية لملف تعريف الارتباط تستحق بعض التوضيح. هذا هو الطابع الزمني ، أي عدد الثواني منذ 1 يناير 1970. الطابع الزمني هو قيمة تزيد بمقدار 1 في كل ثانية. للحصول على الطابع الزمني الحالي (timestamp ) ، استخدم الوظيفة   time()  . لتحديد تاريخ انتهاء الصلاحية لملف تعريف الارتباط ، يجب إضافة عدد الثواني التي يجب أن تنتهي صلاحيتها بعد ذلك إلى "الوقت الحالي".
إذا كنت ترغب في حذف ملفات تعريف الارتباط في السنة، أن تكتب:   time() + 365*24*3600 . هذا يعني: الطابع الزمني الحالي (timestamp ) $ + $ عدد الثواني في السنة. سيؤدي هذا إلى حذف ملف تعريف الارتباط الخاص بك في سنة واحدة بالضبط.
إليك كيفية إنشاء ملف تعريف ارتباط: 

<?php
setcookie('pseudo', 'M@teo21', time() + 365*24*3600); 
?>
 تأمين ملف تعريف الارتباط الخاص بك مع وضع httpOnly
أوصيك بتنشيط الخيار   httpOnly  على ملف تعريف الارتباط. دون الدخول في التفاصيل ، سيجعل هذا الوصول إلى ملف تعريف الارتباط الخاص بك في JavaScript على جميع المتصفحات التي تدعم هذا الخيار (هذا هو الحال بالنسبة لجميع المتصفحات الحديثة.). يقلل هذا الخيار بشكل كبير من مخاطر ثغرات XSS على موقعك ، في حال نسيت استخدامها   htmlspecialchars  في مرحلة ما.
وسوف نوصي بالتالي خلق ملف تعريف الارتباط الخاص بهذا الشكل:

<?php
setcookie('pseudo', 'M@teo21', time() + 365*24*3600, null, null, false, true); 
?>
يتيح المٌدخل الأخير   true  تنشيط الوضع   httpOnly  على ملف تعريف الارتباط ، وبالتالي جعله أكثر أمانًا بطريقة أو بأخرى. لا تكلفك شيئًا وتقلل من خطر تعرض أحد زوار موقعك في يوم من الأيام لمحتوى ملف تعريف ارتباط سُرق بسبب وجود خلل في XSS .
المٌدخلات المتوسطة هي مٌدخلات لا نستخدمها ، لذا فقد وضعتها   null  .
قم بإنشاء ملف تعريف الارتباط قبل كتابة HTML
هناك مشكلة صغيرة في   setcookie ... بالنسبة إلى   session_start ، تعمل هذه الوظيفة فقط إذا قمت بالاتصال بها قبل أي كود HTML (وبالتالي قبل العلامة  <!DOCTYPE> ) .
لذلك لا تضع أي كود HTML قبل الاستخدام   setcookie  . معظم الناس الذين لديهم مشاكل مع   setcookie  هذا ارتكبوا هذا الخطأ ، لذلك تذكر!
الآن ، لنرى كيف سأكتب ملفي تعريف ارتباط ، أحدهما يحتفظ باسم المستخدم الخاص بي لمدة عام ، والآخر يحتفظ باسم بلدي:

<?php
setcookie('pseudo', 'M@teo21', time() + 365*24*3600, null, null, false, true);
setcookie('pays', 'France', time() + 365*24*3600, null, null, false, true);

// والآن فقط يمكننا البدء في كتابة كود html
?>
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title> super page PHP</title>
    </head>
    <body>
    
    etc.
يتم كتابة ملفات تعريف الارتباط! كما ترون ، لكتابة اثنين من ملفات تعريف الارتباط عليك استعمال setcookie  مرتين.
عرض ملف تعريف الارتباط
هذا هو أبسط جزء. قبل البدء في العمل على الصفحة ، يقرأ PHP ملفات تعريف الارتباط الخاصة بالعميل لاسترداد جميع المعلومات التي تحتوي عليها. يتم وضع هذه المعلومات في superglobal   $_COOKIE ، في شكل صفيف ، كالمعتاد.
لذلك، إذا أردت أن تؤكد على لقب الزائر الذي كنت قد سجلته في ملف تعريف الارتباط ، ما عليك الا كتابة  $_COOKIE['pseudo'] فقط .
مما يعطينا كود PHP بسيط لعرض اسم مستخدم الزائر مرة أخرى:

<p>
    أنا اتذكرك جيدا !<br />
    اسمك هو  <?php echo $_COOKIE['pseudo']; ?> و انت من  <?php echo $_COOKIE['pays']; ?> أليس كذلك  ?
</p>
كما ترون مرة أخرى ، فإن الميزة الكبيرة هي أن المتغيرات superglobal متوفرة في كل مكان.
هل تحتاج إلى معرفة ما يحتوي ملف تعريف الارتباط   pseudo  ؟ فقط قم بـ عرض محتوى superglobal   $_COOKIE['pseudo']  !

لاحظ أنه في حالة عدم وجود ملف تعريف الارتباط ، فإن المتغير superglobal غير موجود. لذلك عليك أن تستعمل isset   للتحقق من وجود ملف تعريف الارتباط أم لا.
ملفات تعريف الارتباط تأتي من الزائر. مثل أي معلومات تأتي من الزائر ، فهي غير آمنة . يمكن لأي زائر إنشاء ملفات تعريف الارتباط ، وبالتالي إرسال معلومات خاطئة إلى موقعك. تذكر ذلك عندما تقرأ ملفات تعريف الارتباط الخاصة بالزائر: ربما تكون قد عدّلتها ، لذا كن حذرًا وان لا يكون لديك إيمان أعمى بمحتواها!
تعديل ملف تعريف ارتباط موجود
قد تتساءل عن كيفية تعديل ملف تعريف ارتباط موجود؟ مرة أخرى ، الأمر بسيط للغاية: عليك استدعاء مرة أخرى   setcookie  عن طريق الاحتفاظ بنفس اسم ملف تعريف الارتباط ، والذي "سيمسح" الاسم القديم.
على سبيل المثال ، إذا كنت أعيش الآن في الصين ، فسوف أكتب:

<?php
setcookie('pays', 'China', time() + 365*24*3600, null, null, false, true); 
?>
لاحظ أنه يتم إعادة تعيين وقت انتهاء صلاحية ملف تعريف الارتباط إلى صفر لمدة عام واحد.

في الخلاصة


  • متغيرات Superglobal هي متغيرات يتم إنشاؤها تلقائيًا بواسطة PHP . أنها تأتي في شكل صفائف تحتوي على أنواع مختلفة من المعلومات.
  • في الفصول السابقة ، اكتشفنا اثنين من superglobals الأساسية :   $_GET   (الذي يحتوي على بيانات من URL) و   $_POST  (الذي يحتوي على بيانات من نموذج) .
  • تتيح superglobal   $_SESSION  تخزين المعلومات التي سيتم نقلها تلقائيًا من صفحة إلى أخرى طوال مدة زيارة الزائر لموقعك. يجب عليك أولاً تنشيط الجلسات عن طريق استدعاء الوظيفة   session_start() .
  •   تمثل superglobal $_COOKIE  محتوى جميع ملفات تعريف الارتباط المخزنة بواسطة موقعك على جهاز الكمبيوتر الخاص بالزائر. ملفات تعريف الارتباط هي ملفات صغيرة يمكن كتابتها إلى جهاز الزائر ، على سبيل المثال لتذكر اسمها. نخلق ملف تعريف الارتباط مع الوظيفة   setcookie()  .