الدرس الثاني عشر: الجلسات (Sessions)

عندما تزور موقعاً فأنت تفعل أشياء مختلفة، تنتقل من صفحة لأخرى وربما تضع معلومات في نموذج أو تشتري منتجاً.

كمطور مواقع مثل هذه المعلومات لها أهمية كبيرة لتوفير حلول ناجحة للويب.

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

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

الجلسات

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

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

لنفترض أن 50 شخصاً يتصفحون نفس الموقع - متجر مثلاً - في نفس الوقت، أفضل وسيلة لحفظ معلومات ما قد تحويه سلة المشتريات لكل واحد منهم هي الجلسات، لكي نحدد كل زائر المزود يستخدم رقم تعريف محدد يحفظ في كوكيز (cookie)، الكوكيز هو ملف نصي صغير يحفظ في حاسوب المستخدم، (للمزيد حول الكوكيز اقرأ الدرس الثالث عشر)، لذلك الجلسات تتطلب دعم الكوكيز في متصفح الزائر.

مثال لاستخدام الجلسات

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

سميت المتغير "StartTime" وحفظته بإضافة هذه الأسطر لبرنامج PHP:


	<?php

	session_start();
	$_SESSION["StartTime"] = date("r");

	?>
	
	

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

الجلسة الخاصة بك رقم تعريفها: csqhhu901n71ebjv360cni47e1

في أي وقت، يمكنني أن أطلب "StartTime" من الجلسة بكتابة التالي:


	<?php

	session_start();
	echo $_SESSION["StartTime"];

	?>
	
	

والذي سيظهر لنا أن هذه الصفحة طلبت في هذا الوقت Sat, 27 Jul 2024 13:36:35 +0000 (بحسب ساعة المزود).

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

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


	<?php

	session_destroy();

	?>
	
	

لننظر في مثال آخر حيث الجلسات تستخدم: كلمات السر.

نظام دخول مع الجلسات

في المثال التالي سنطور مثالاً بسيطاً لنظام دخول، سنستخدم كثيراً مما تعلمناه في الدروس السابقة.

أول ما نحتاجه هو نموذج يدخل فيه الناس الاسم وكلمة السر، سيكون بهذا الشكل:


	<html>
	<head>
	<title>Login</title>

	</head>
	<body>
	<form method="post" action="login.php">

	<p>Username: <input type="text" name="username" /></p>
	<p>Password: <input type="text" name="password" /></p>

	<p><input type="submit" value="Let me in" /></p>

	</form>
	</body>
	</html>

	
	

بعد ذلك ننشأ ملف login.php.

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

	<html>

	<head>
	<title>Login</title>

	</head>
	<body>
	
	<?php

	// Check if username and password are correct
	if ($_POST["username"] == "php" && $_POST["password"] == "php") {
	 
	// If correct, we set the session to YES
	  session_start();
	  $_SESSION["Login"] = "YES";
	  echo "<h1>You are now logged correctly in</h1>";
	  echo "<p><a href='document.php'>Link to protected file</a><p/>";
	 
	}
	else {
	 
	// If not correct, we set the session to NO
	  session_start();
	  $_SESSION["Login"] = "NO";
	  echo "<h1>You are NOT logged correctly in </h1>";
	  echo "<p><a href='document.php'>Link to protected file</a></p>";
	 
	}

	?>

	</body>
	</html>

	
	

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


	<?php

	// Start up your PHP Session 
	session_start();

	// If the user is not logged in send him/her to the login form
	if ($_SESSION["Login"] != "YES") {
	  header("Location: form.php");
	}

	?>

	<html>
	<head>
	<title>Login</title>
	</head>

	<body>
	<h1>This document is protected</h1>

	<p>You can only see it if you are logged in.</p>
	</body>
	</html>
	
	

الآن نحن نعرف أمر الجلسات، في الدرس التالي سنعمل في نفس المساحة لكن سنلقي نظرة مقربة أكثر على الكوكيز.



<< Lesson 11: تمرير متغيرات النماذج

Lesson 13: كوكيز >>