دوستان گرامی امروز کمی درمورد session با شما صحبت کردیم. همانطور که میدانید چون مبحث session نقش مهمی در آموزش PHP و کارکرد PHP دارد . بنابراین در این بخش از آموزش PHP به ادامه آموزش هامون در این باب می پردازیم .
session نیز همانند کوکی (cookie) یکی از مکانیزم های حفظ تاریخچه ارتباط بین کلاینت و سرور است منتها بر خلاف کوکی اینبار در سمت سرور این تاریخچه حفظ می شود . در حقیقت با استفاده از 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 و به عنوان اولین دستور به کار رود .
مرحله بعدی تنظیم session با استفاده از آرایه سراسری $_SESSION است . این آرایه هم مانند $_COOKIE یک آرایه انجمنی است . برای فهم بیشتر مطلب یک مثال عملی را با هم بررسی می کنیم . در این مثال میخواهیم تعداد خوانده شدن یک صفحه (در ساده ترین حالت و بدون بررسی کاربران تکراری – در واقع تعداد لود شدن صفحه ) را حساب کنیم :
بعد از استفاده از تابع session_start می توانید به راحتی با فراخوانی آرایه $_SESSION متغیر های session را دستکاری کنید .
تخریب یا حذف session
برای حذف session (عملی که باید مثلا در هنگام عمل logout انجام شود) باید از تابع unset استفاده نمود . تابع unset یک پارامتر می گیرد و آن نام متغیر session است . مثلا در هنگام عمل logout باید دستورات زیر انجام گیرد :