php المتغيرات الشاملة المحدّدة

php SESSIONS : الجلسات

آخر تحيين: 10-01-2015

استعمال قاعدة البيانات php COOKIES : الكوكيز


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

تعريف الجلسة : session

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

مراحل حياة الجلسة

عمر الجلسة يمر بثلاث مراحل :

  • فتح الجلسة : session_start()
  • إنشاء متغيرات الجلسة : $_SESSION[ ]
  • تدمير الجلسة : session_destroy()

فتح الجلسة

عندما يأتي زائر إلى موقعكم تأمرون بفتح جلسة له ، و يقوم php بإعطائه مفتاحا بمثابة هوية له ، هذا المفتاح يسمى PHPSESSID ، و يتكون غالبا من نص لا يتجاوز 32 حركة مثال : "c19gh4r15vx456ug9871jm8s0zke93b7" ، و يتم تداوله من صفحة إلى أخرى إما عبر عنوان الويب و غالبا عن طريق الكوكيز . (المفتاح فقط هو الذي يتم تمريره و ليس البيانات).
لفتح الجلسة نستخدم الدالة الجاهزة session_start() و يجب كتابتها في بداية جميع صفحات php قبل كتابة أي شيفرة html ، أو القيام بأي عرض عن طريق echo او print . بالضبط كما رأينا أثناء إنشاء الكوكيز .

تعيين متغيرات الجلسة

بعد فتح الجلسة يمكنكم إنشاء العدد الذي تريدونه من متغيرات الجلسة .
لإنشاء متغيرات الجلسة ، نستعمل المتغير $_SESSION[ ] مثال :

<?php
// فتح الجلسة 
session_start();
// تعيين متغيرات الجلسة 
$_SESSION['pseudo'] = 'زيد';
$_SESSION['name'] = 'ابن عمر';
$_SESSION['age'] = '25';

بخلاف session_start() ، التي يجب كتابتها قبل عرض أي شيء على المتصفح . يمكننا إنشاء متغيرات الجلسة حيث ما نريد في صفحتنا :

<?php
session_start();
// تعيين بعض متغيرات الجلسة
$_SESSION['pseudo'] = 'زيد';
$_SESSION['name'] = 'ابن عمر';
?>
<!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');
}

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

لا يكمن دور الجلسات فقط في تمرير البيانات كما سترون لاحقا ، حيث سنعتمد عليها بشكل كبير في حماية أجزاء من موقعنا . كلوحة المدير أو فضاءات الدردشة و الأعضاء ...