php SESSIONS : الجلسات
رأينا بأن الخادوم لا يستقر له وضع ، و لا يجعل أي رابط بين طلبين و لو قدّمهما نفس الزبون . لحل هذه المشكلة قمنا بتخزين بياناتنا في متغيرات محدّدة و شاملة ، فاستعملنا GET_$ و POST_$ لنقلها من صفحة إلى أخرى . و بما أن المتغيران متخصصين في إرسال الطلبات . لجأنا إلى الكوكيز COOKIE_$ لحفظ هذه البيانات لمدّة أطول .
كل هذه الطرق تختلف في وضعيات و حدود استعمالها و مستوى حماية بياناتها ، مثلا لا يجب أن نرسل معلومات حساسة ككلمة السر باستعمال الكوكيز أو عبر عنوان الويب كما أن كمية البيانات التي نرسلها جد محدودة ... إلخ
و لهذا ، بما أن مستوى الحماية شيء جد أساسي . أصبح استعمال الجلسات لا غنى عنه في أي موقع تفاعلي .
كل هذه الطرق تختلف في وضعيات و حدود استعمالها و مستوى حماية بياناتها ، مثلا لا يجب أن نرسل معلومات حساسة ككلمة السر باستعمال الكوكيز أو عبر عنوان الويب كما أن كمية البيانات التي نرسلها جد محدودة ... إلخ
و لهذا ، بما أن مستوى الحماية شيء جد أساسي . أصبح استعمال الجلسات لا غنى عنه في أي موقع تفاعلي .
تعريف الجلسة : session
الجلسة هي طريقة لحفظ بيانات تخص عضوا ما ، طيلة مدّة تواجده على موقعكم ، بخلاف بيانات الكوكيز التي تظل تتنقل بين المتصفح و الخادوم جيئة و ذهابا و أمام أعين المتلصّصين . بيانات الجلسة تُخزّن على الخادوم ، و يكون من المستحيل الولوج إليها عبر javascript . كما أن كميتها غير محدّدة ، يمكن إرسال قدر ما تشاؤؤن من المعلومات .
مراحل حياة الجلسة
عمر الجلسة يمر بثلاث مراحل :
- فتح الجلسة :
session_start()
- إنشاء متغيرات الجلسة :
$_SESSION[ ]
- تدمير الجلسة :
session_destroy()
فتح الجلسة
عندما يأتي زائر إلى موقعكم تأمرون بفتح جلسة له ، و يقوم php بإعطائه مفتاحا بمثابة هوية له ، هذا المفتاح يسمى PHPSESSID ، و يتكون غالبا من نص لا يتجاوز 32 حركة مثال : "c19gh4r15vx456ug9871jm8s0zke93b7" ، و يتم تداوله من صفحة إلى أخرى إما عبر عنوان الويب و غالبا عن طريق الكوكيز . (المفتاح فقط هو الذي يتم تمريره و ليس البيانات).
لفتح الجلسة نستخدم الدالة الجاهزة session_start() و يجب كتابتها في بداية جميع صفحات php قبل كتابة أي شيفرة html ، أو القيام بأي عرض عن طريق echo او print . بالضبط كما رأينا أثناء إنشاء الكوكيز .
لفتح الجلسة نستخدم الدالة الجاهزة session_start() و يجب كتابتها في بداية جميع صفحات php قبل كتابة أي شيفرة html ، أو القيام بأي عرض عن طريق echo او print . بالضبط كما رأينا أثناء إنشاء الكوكيز .
تعيين متغيرات الجلسة
بعد فتح الجلسة يمكنكم إنشاء العدد الذي تريدونه من متغيرات الجلسة .
لإنشاء متغيرات الجلسة ، نستعمل المتغير $_SESSION[ ] مثال :
لإنشاء متغيرات الجلسة ، نستعمل المتغير $_SESSION[ ] مثال :
<?php
// فتح الجلسة
session_start();
// تعيين متغيرات الجلسة
$_SESSION['pseudo'] = 'sameh';
$_SESSION['name'] = 'hani';
$_SESSION['age'] = '16';
بخلاف session_start() ، التي يجب كتابتها قبل عرض أي شيء على المتصفح . يمكننا إنشاء متغيرات الجلسة حيث ما نريد في صفحتنا :
<?php
session_start();
// تعيين بعض متغيرات الجلسة
$_SESSION['pseudo'] = 'sameh';
$_SESSION['name'] = 'hani';
?>
<!DOCTYPE html>
<html dir="rtl">
<head></head>
<body>
...
<?php
// تعيين متغيرات أخرى للجلسة
$_SESSION['age'] = '25';
?>
...
</body>
</html>
تدمير الجلسة
عند مغادرة الزائر لموقعكم ، يتم تدمير الجلسة و حذف جميع بياناتها من الخادوم . و غالبا ما لا نعرف بالضبط متى غادر ، لذا يتم تدميرها بعد مضي وقت يسمى timeout . و تختلف هذه المدّة من خادوم إلى آخر .
للتأكد من تدمير الجلسة فور مغادرة العضو ، يمكننا إضافة صفحة لتسجيل الخروج .
لتدمير الجلسة نستعمل الدالة
للتأكد من تدمير الجلسة فور مغادرة العضو ، يمكننا إضافة صفحة لتسجيل الخروج .
لتدمير الجلسة نستعمل الدالة
session_destroy()
سنرى هذه المراحل بتفصيل في المثال التالي ، ثقوا بي ، فهي أسهل مما تبدو لكم
تطبيق
سنقوم بإنشاء ثلاث صفحات :
- index.php : صفحة الإستقبال ، و تتضمن أيضا استمارة تسجيل الدّخول .
- login.php : صفحة معالجة بيانات الإستمارة ، و إنشاء متغيرات الجلسة
- logout.php : صفحة تسجيل الخروج و تدمير الجلسة .
حولوا قبل رؤية الحل :
index.php
<?php
// فتح الجلسة
session_start();
?>
<!DOCTYPE html>
<html dir="rtl">
<head>
<meta charset="utf-8">
<style>
label{display:inline-block;width:100px;}
</style>
</head>
<body>
<h1> صفحة الإستقبال </h1>
<?php
// إذا نجح العضو في تسجيل دخوله ، نستقبله بكلمة ترحاب
if (isset($_SESSION['pseudo']) AND isset($_SESSION['pays']))
{
echo '<p>مرحبا بك : <strong>'.$_SESSION['pseudo'].'</strong> بلدك هو :<strong>'.$_SESSION['pays'].'</strong><p>';
echo '<p>أنت الآن في صفحة الإستقبال <p>';
// ثم نضيف روابط إلى صفحات من موقعنا
echo '<p> <a href="#"> صفحة 6 </a> <br>
<a href="#"> صفحة 9 </a> <br>
</p>';
// و نضع له رابطا إذا أراد تدمير الجلسة
echo '<p> <a href="logout.php"> تسجيل الخروج </a> </p>';
}
else // أو ندعوه لملأ استمارة الدّخول
{
?>
<p> المرجو ملأ الإستمارة التالية ، للتعريف عن نفسك </p>
<form action="login.php" method="post">
<label for="pseudo"> اسم المستخدم </label><input type="text" name="pseudo" id="pseudo"><br>
<label for="pays"> البلد </label><input type="text" name="pays" id="pays">
<p><input type="submit" value = "إرسال"></p>
</form>
<?php
}
?>
</body>
</html>
login.php
<?php
// فتح الجلسة
session_start();
// إذا نجح العضو في ملأ الإستمارة
if (!empty($_POST['pseudo']) AND !empty($_POST['pays']))
{
// نقوم بإنشاء متغيرات الجلسة
$_SESSION['pseudo'] = $_POST['pseudo'];
$_SESSION['pays'] = $_POST['pays'];
// ثم تحويله تلقائيا إلى صفحة الإستقبال
header('location:index.php');
}
else
{
/*
إذا لم يقم بملأ الإستمارة بشكل صحيح
أو قد يكون أصلا نجح في فتح الجلسة
نقوم أيضا بتحويله لصفحة الإستقبال
*/
header('location:index.php');
}
?>
logout.php
<?php
// فتح الجلسة
session_start();
if (isset($_SESSION['pseudo']))
{
// نقوم بتدمير الجلسة
session_destroy();
// ثم تحويله تلقائيا إلى صفحة الإستقبال
header('location:index.php');
exit();
}
else
{
//إذا كانت الجلسة أصلا مدمّرة أيضا نقوم تحويله تلقائيا إلى صفحة الإستقبال
header('location:index.php');
}
هذا مثال بسيط . عادة في استمارة تسجيل الدخول ، يجب إدخال كلمة المرور . لكن تفاديت هذا الحقل ، نظرا لأهميته و مكانته سنوليه عناية خاصة في فصل قاعدة البيانات .