session در php
سه شنبه, ۹ ارديبهشت ۱۳۹۳، ۰۱:۰۳ ق.ظ
مبحث session نقش مهمی در آموزش PHP و کارکرد PHP دارد . بنابراین در این بخش از آموزش PHP به آموزش Session می پردازیم .
session
یکی از مکانیزم های حفظ تاریخچه ارتباط بین کلاینت و سرور است منتها بر
خلاف کوکی اینبار در سمت سرور این تاریخچه حفظ می شود . در حقیقت با
استفاده از session در PHP (و البته سایر زبانها) می توانیم در بخش سرور متغیر یا متغیر هایی تعریف کنیم منحصر به یک کاربر خاص (یعنی هر کاربر session خاص خود را دارد) که این متغیر یا متغیر ها در تمامی صفحات بخش سرور قابل دسترس هستند . فلسفه پیدایش و استفاده از session به
مشکلی در اینترنت باز می گردد و آن اینکه وب سرور نمیتواند تشخیص دهد شما
که هستید وقبلا چه کارهایی انجام داده اید . مثلا فرض کنید یک سیستم طراحی
کرده اید که یک صفحه ورود (Login) دارد . کاربر باید از
این صفحه بگذرد و به اصطلاح در آن Log In کند . تا سیستم شما وی را به
صفحه ای خاص رهنمون شود . اگر برنامه شما از session استفاده
نکرده باشد در صفحه بعدی قادر نیست تشخیص دهد که این کاربر قبلا از صفحه
Login رد شده است یا خیر . مشکل به نقصی در پروتکل HTTP برمیگردد : اصطلاحا
می گوئیم پروتکل HTTP یک پروتکل بدون وضعیت (بدون state) است و یا به
عبارت دیگر این پروتکل یک پروتکل بدون حافظه است یعنی با ورود به یک صفحه
جدید به یاد نمی آورد در صفحه قبلی چه اتفاقی رخ داده است . session که در متون فارسی معمولا با عبارت جلسه یا نشست ترجمه
می شود راه حلی است برای این مشکل . جلسه یا نشست این مشکل را با ذخیره
سازی اطلاعاتی راجع به کاربران در سمت سرور به منظور استفاده های بعدی حل
می کند . اطلاعات session (جلسه یا نشست) به محض اینکه
کاربر از وب سایت خارج شود و مرورگر را ببندد از سرور حذف می شود .
بنابراین اگر نیاز دارید اطلاعاتی را به صورت دائمی ذخیره کنید می توانید
آنرا در دیتابیس ذخیره کنید . بگذارید بحث را بیشتر باز کنیم فرض کنید وب
سایتی دارید که در آن یک بخش ورود کاربران دارید و می خواهید اگر کاربر login کرد بتواند یکسری دسترسی های خاص داشته باشد و یکسری فعالیت های خاصی بتواند انجام دهد گفتیم که باید از session استفاده کنیم تا پس از عبور از صفحه Login بتوانیم به یاد بیاوریم که این کاربر login کرده است . کاری که باید در صفحه login انجام دهیم اینست که پس از بررسی صحت نام و کلمه عبور کاربر یک متغیر session تنظیم
کنیم و آنرا برابر نام عبور کاربر قرار دهیم . حال در هر صفحه ای که
بخواهیم بررسی کنیم که کاربر وارد شده یا نه کافیست بررسی کنیم که آیا این
متغیر session تنظیم (set) شده یا خیر . اگر set شده باشد یعنی کاربر وارد
شده و میتواند برخی دسترسی های خاص داشته باشد ضمن اینکه با این روش حتی می
توان فهمید که کاربر وارد شده کیست ؟ چرا که مقدار متغیر session را برابر نام عبور قرار داده ایم . ضمن اینکه باید حواسمان به این مطلب نیز باشد که با وجود ذخیره سازی session در سرور این متغیر ها برای هر کاربر جداگانه تنظیم می شود یعنی درست است که ما برای تمام کاربران یک متغیر session با
نام مثلا username تنظیم می کنیم ولی این username باعث نمی شود که مقدار
username کاربر دیگر تحت تأثیر قرار بگیرد برخی از برنامه نویسان مبتدی
همیشه این دغدغه را دارند که چون کدهای سمت سرور بر روی یک ماشین اجرا می
شود و بین همه مشترک است پس ممکن است این اختلاط پیش بیاید . ولی وب سرور
این مشکل را با قرار دادن شناسه session که مقدار یکتایی برای هر کاربر
دارد و با نام UID معروف شده است برطرف کرده است . جلسه یا session ی که
سرور با کلاینت تشکیل میدهد با این شناسه یکتا قابل شناسائیست بنابراین هر
متغیر session نیز چون با این شناسه دستیابی می شود برای هر کاربر جداگانه
بررسی می شود . حال ببینیم session در عمل چگونه کار می کند :
برای اینکه به وب سرور بگوئید میخواهید از session استفاده کنید تا وب سرور این UID را به کاربری که درخواست جاری را فرستاده اختصاص دهد باید اولین دستور صفحه شما استفاده از تابع session_start باشد . بنابراین اولین گام استفاده از session در PHP راه اندازی session با تابع session_start است . تابع session_start نیز همانند تابع setcookie باید قبل از تگ شروع HTML و به عنوان اولین دستور به کار رود .
<?php
session_start();
?>
<html>
<head>
</head>
<body>
</body>
</html>
مرحله بعدی تنظیم session با استفاده از آرایه سراسری $_SESSION است . این آرایه هم مانند $_COOKIE
یک آرایه انجمنی است . برای فهم بیشتر مطلب یک مثال عملی را با هم بررسی
می کنیم . در این مثال میخواهیم تعداد خوانده شدن یک صفحه (در ساده ترین
حالت و بدون بررسی کاربران تکراری - در واقع تعداد لود شدن صفحه ) را حساب
کنیم :
<?php
session_start();
if(isset($_SESSION['pageviews']))
$_SESSION['pageviews'] = $_SESSION['pageviews'] + 1;
else
$_SESSION['pageviews'] = 1;
?>
<html>
<head>
</head>
<body>
<?php
echo "Page Views : ".$_SESSION['pageviews'] ;
?>
</body>
</html>
بعد از استفاده از تابع session_start می توانید به راحتی با فراخوانی آرایه $_SESSION متغیر های session را دستکاری کنید .
تخریب یا حذف session
برای حذف session (عملی
که باید مثلا در هنگام عمل logout انجام شود) باید از تابع unset استفاده
نمود . تابع unset یک پارامتر می گیرد و آن نام متغیر session است . مثلا
در هنگام عمل logout باید دستورات زیر انجام گیرد :
<?php
session_start();
if(isset($_POST['btnLogout']))
unset($_SESSION['username']);
?>
<html>
<head>
</head>
<body>
</body>
</html>
- ۹۳/۰۲/۰۹