session به مدت زمانی گغته میشود که کاربر در سایت شما سپری میکند. با استفاده از session میتوانید اطلاعات خودتان را به گونه ای ذخیره کنید که تا قبل از خروج کاربر از سایت شما در اختیار تمامی صفحات سایتتان باشد. تفاوت session با کوکی در این است که session بر روی کامپیوتر سرور ذخیره میشود و کاربران نمیتوانند آن را حذف یا غیر فعال کنند.
درک روش کار session های PHP:
php به شما اجازه میدهد که یک session تعریف کرده و متغییرهای دلخواه خود را در آن ذخیره کنید. بعد از ساخت session متغییرهای آن قابل استفاده در هر کدام از صفحه های وب سایت شما خواهند بود. برای ایجاد قابلیت دسترسی به اطلاعات یک جلسه، php مراحل زیر را طی میکند:
۱- php یک شماره شناسه جلسه غیرتکراری ایجاد کرده و به session اختصاص میدهد که برای هر کاربر منحصربفرد است. این شماره شناسه در یک متغییر سیستمی PHP بنام PHPSESSID ذخیره میشود.
۲- PHP متغییرهایی را که قصد دارید در session ذخیره کنید، در فایلی بر روی سرور ذخیره میکند. نام فایل همان شماره شناسه است و در مسیری که در متغییر session.save_path در فایل php.ini مشخص شده است ذخیره میشود.
۳- PHP شماره جلسه را به تمام صفحات سایت ارسال میکند. اگر کاربر قابلیت استفاده از کوکی ها را فعال کرده باشد،PHP شماره شناسه جلسات را از طریق کوکی ها به همه صفحه های سایت ارسال میکند. ولی اگر کوکی ها غیرفعال باشند، رفتار PHP بستگی به وضعیت متغییر trans-id در فایل php.ini دارد که در ادامه توضیح داده میشود.
۴- PHP متغییرها را از فایل session خوانده و در اختیار هر صفحه در همان session قرار میدهد.متغییرهای session در آرایه SESSION_$ ذخیره میشوند.
باز کردن و بستن جلسات:
باز کردن جلسه یا session با ساختار زیر زیر انجام میشود:
session_start();
این دستور ابتدا وجود شماره شناسه session را بررسی میکند. و اگر آن را بیابد متغییرهای همان session را از فایل مربوطه میخواند، اما اگر شماره session را نیابد یک session ایجاد کرده و شماره شناسه مربوطه به آن را تولید میکند.
برای بستن یک جلسه و از بین بردن آن میتوان از دستور زیر استفاده کنید:
session_destroy();
این دستور همه اطلاعات موجود در فایل session را از بین میبرد و PHP دیگر شماره شناسه جلسات را به سایر صفحات سایت ارسال نمیکند.
استفاده از متغییرهای session در PHP:
برای ذخیره یک متغییر در یک جلسه، بطوری که در صفحات دیگر قابل دسترس باشد باید آن را در آرایه SESSION_$ بصورت زیر دخیره کنید:
$_SESSION[\”varibale_name\”]=”value”
حذف یک متغییر جلسه:
برای حذف متغییرهای جلسه میتوانید از کدهای زیر استفاده کنید:
unset($_SESSION[\’variable_name\’]);
با دستور زیر نیز مبتوان کل متغییرهای حلسه را حذف کرد:
session_unset();
توجه داشته باشید که در این صورت فقط متغییرهای جلسه حذف میشوند ولی جلسه پایان نمیابد.
برای پایان جلسه میتوان از دستور زیر استفاده کرد:
session_destroy();
روشهای انتقال شماره جلسات:
php ابتدا کوکی را بررسی میکند بر حسب فعال و غیرفعال بودن کوکی ها به صورت زیر عمل میکند:
الف)کوکی فعال باشد
در این صورت مراحل کار به صورت زیر خواهد بود:
۱- یک متغییر بنام $phpSESSIONID تعریف کرده و شماره شناسه را داخل آن قرار میدهد.
۲- توسط کوکی ها $phpSESSIONID را از یک صفحه به صفحه دیگر میبرد.
ب)کوکی ها فعال نباشند:
در این صورت مراحل کار به صورت زیر خواهد بود:
۱- php یک ثابت بنام SID تعریف میکند.
۲- اگر trans_id فعال باشد مقدار ثابت فوق را از یک صفحه به صفحه بعد میفرستد.
اگر کاربر توسط یک لینک یا یک تابع هدر و یا ی فرم GET به صفحه بعد منتقل شود مقدار SID در آدرس ظاهر میشود.
ولی اگر کاربر توسظ روش post به صفحه دیگر برود SID توسط یک تگ input از نوع hidden منتقل خواهد شد.
در صورتی که trans_id غیرفعال باشد SID منتقل نمیشود و باسد به صورت دستی ارسال شود که این روش ارسال بعدا توضیح داده خواهد شد.
برای فعال کردن trans_id میتوانید از قسمت php.ini مقدار session.use_trans_id را برابر عدد یک قرار دهید و سپس فایل را ذخیره کرده و سرور php را restart کنید.
ارسال شناسه جلسه بصورت دستی:
اگر کوکی توسط کاربر غیرفعال باشد و یا trans_id غیرفعال باشد:
php شماره جلسه را به صفحات بعد منتقل نمیکند و ما باید بصورت دستی این کار را انجام دهیم. در این صورت php یک ثابت بنام SID تعریف میکند که :
۱-اگر بخواهید کاربر را توسط یک لینک ، یک تابع هدر و یا با یک فرم از طریق متد GET به صفحه بعد هدایت کنید باید آدرس را بصورت زیر اعلان کنید:
nextpage.php?<?php echo(SID);?> که nextpage.php نام فایل صفحه بعد است.
مثلا به لینک زیر دقت کنید:
echo ( <a href=\\”nexpage.php?”.SID.”\\”>nexpage</a>);
و این آدرس بصورت خودکار به صورت زیر تبدیل خواهد شد:
<a href=”nextpage?PHPSESSID=….”> nexpage</a>
2- ولی اگر از متد post در یک صفحه استفاده کنیدبرای ارسال شماره جلسه باید بصورت زیر عمل کنید:
<?php
$PHPSESSID=session_id();
echo(“<form action=\\”nextpage.php\\”method=post>\\n”);
echo(“<input type=\\”hidden\\”name=\\”PHPSESSID\\”value=\\”$PHPSESSID\\”/>\\n”);
echo(“<input type=\\”submit\\” value=\\”nextpage\\”/>\\n”);
echo(“<form>\\n”);
?>
نوشته مفهوم session در php اولین بار در مرجع اپن سورس ، گنو/لینوکس پدیدار شد.