سرور سایتی که وارد آن می شوید ، اطلاعات شما مثل username , pass را در متغیرهایی به نام session ذخیره می کند . هر بار که صفحه جدیدی از همان سایت را باز می کنید ، سرور اطلاعات session شما را به همراه درخواست صفحه به مرورگر ارسال کرده و بنابراین دیگر نیازی ندارید در هر صفحه اطلاعات کاربری خود را مجددا وارد نمایید .
این فرایند را تاکنون بارها تجربه کرده و باعث راحتی شما بوده است . اما session چگونه ایجاد و استفاده می شوند .
یک راه برای در دسترس قرار دادن اطلاعات در صفحات مختلف یک وب سایت کامل وجود دارد که آن بهره گیری از عملکرد PHP session است. کاری که session انجام می دهد، به وجود آوردن یک فایل در دایرکتوری موقت بر روی سِرور است، جایی که متغیرهای رجیستر و ثبت شده ی session و مقادیر آن ها نگهداری و ذخیره می شوند. این اطلاعات به هنگام بازدید کاربر، در تمام صفحات سایت آماده و در دسترس است.
مکان قرارگیری فایل موقتی، توسط تنظیمات واقع در php.ini file که session.save_path خوانده می شود، تعیین می گردد. پیش از استفاده کردن از متغیرهای session، حتماً این مسیر را معلوم کرده و راه اندازی کنید.
به محض این که session شروع به کار می کند، اتفاقات زیر رخ می دهد:
هنگامی که اسکریپتPHP بخواهد مقدار را از session variable بازیابی کند، PHP به صورت خودکار رشته شناسایی منحصر به فرد session را از PHPSESSID cookie دریافت می کند و سپس در دایرکتوری موقت به دنبال فایلی که آن نام و عنوان را دارد می گردد. فرایند تایید اعتبار، را می توان با مقایسه دو متغیر انجام داد و نتیجه ی آن را به دست آورد.
session پس از این که کاربر صفحه را ترک می کند یا مرورگر را می بندد به پایان می رسد. سِرور پس از گذشت زمان مشخص که معمولاً 30 دقیقه است session را خاتمه می دهد.
PHP session به راحتی با فراخواندن و کمک گرفتن از تابع ()session_start راه اندازی می شود.
این تابع ابتدا بررسی می کند که آیا session ای آغاز شده یا نه. اگر session شروع نشده باشد، آن را راه اندازی می کند. توصیه می شود دستور فراخوانی ()session_start را ابتدای صفحه قرار دهید.
متغیرهایsession در آرایه شرکت پذیری به نام [ ]SESSION_$ ذخیره می شوند. این متغیرها در تمام طول یک session قابل استفاده و دسترسی می باشند.
مثال زیر یک session را راه اندازی کرده وسپس یک متغیر به اسم counter، ثبت می کند که هر بار در هنگام session از صفحه بازدید می کنید، به مقدار آن اضافه می شود.
برای اینکه بفهمید آیا متغیر sessionانتخاب و فعال شده یا نه، از تابع ()isset استفاده کنید.
این کد را داخل فایل test.php قرار داده، سپس برای دیدن نتایج بارها و بارها این فایل را بارگیری {load} کنید.
<?php
session_start();
if( isset( $_SESSION['counter'] ) )
{
$_SESSION['counter'] += 1;
}
else
{
$_SESSION['counter'] = 1;
}
$msg = "You have visited this page ".$_SESSION['counter'];
$msg. = "in this session. ";
?>
<title>Setting up a PHP session</title>
<?php echo ( $msg ); ?>
سشن ها معمولا با بسته شدن پنجره مرورگر از بین خواهند رفت برای جلوگیر از این موضوع راه های متفاوتی وجود دارد.
در فایل php.ini میتوان در خط session.cookie_lifetime=0 مقدار زمان برای کوکی مشخص کرد.
میتوان با قرار دادن یک دستور کوکی یک کوکی همنام اسم سشن ایجاد نمود و زمان آن از این پس برابر زمان نشست خواهد شد(هم در قسمت تعریف نشست هم در استفاده از نشست)
setcookie(session_name(), session_id(), time() + 3600);
یک مدل دیگه هم برای نشست وجود دارد که فقط یک بار زمان را شروع میکند و تمدید شدنی نیست.
session_set_cookie_params(24*60*60);
راه دیگر مدیریت نشست با استفاد از دیتابیس است.
از بین بردن PHP session
با تابع ()session_destroy می توانید PHP session را تخریب کنید. این تابع هیچ نیازی به آرگومان ندارد و با یک دستور {call} تمامی متغیرهایsession را از بین می برد. اگر بخواهید تنها یک session variable را فسخ کنید می توانید از عملکرد unset() به منظور غیر فعال کردن session variable استفاده کنید.
در عبارت زیر، یک نمونه unset کردن تک متغیر را به نمایش می گذارد.
<?php
unset($_SESSION['counter']);
?>
دستوری که تمام session variable ها را فسخ می کند در مثال زیر نمایان است.
<?php
session_destroy();
?>
فعال کردن auto session
اگر شما بتوانید متغیر session. auto_start را در فایل php. ini بر روی 1 قراردهید و تنظیم کنید، هنگامی که کاربر از سایت بازدید می کند، دیگر شما نیازی به فراخوانی start_session() function ندارید.
session های بدون cookie
در بعضی موارد کاربر ممکن است به cookie اجازه ی ذخیره شدن بر روی سیستم خود را ندهد. بنابراین روش دیگری برای فرستادن session ID به مرورگر وجود دارد یا پی در پی، می توانید از SID ثابت که پس از شروع به کار session، تعریف می شود برای انجام کارتان استفاده کنید. چنانچه کلاینت session cookie مناسبی نفرستد، شکل آن به این صورت خواهد بود session_name=session_id، در غیر این صورت، به رشته ی تهی گسترش می یابد. بدین ترتیب، می توان همیشه بدون قید و شرط آن را در URL ها گنجاند.
مثال زیر نحوه ی ثبت کردن مقدار و چگونگی درست وصل شدن به صفحه ی دیگری به کمک SID را برای شما نمایش می دهد.
<?php
session_start();
if (isset($_SESSION['counter'])) {
$_SESSION['counter'] = 1;
} else {
$_SESSION['counter']++;
}
$msg = "You have visited this page ". $_SESSION['counter'];
$msg. = "in this session. ";
echo ( $msg );
<p>
To continue click following link <br>
<a href="nextpage. php?<?php echo htmlspecialchars(SID); >">
</a></p><a href="nextpage. php?<?php echo htmlspecialchars(SID); >">
</a>
?>
همچنین از ()htmlspecialchars برای جلوگیری از حملات ناشی از XSS به هنگام پرینت کردن SID می توان کمک گرفت.