مفهوم و کاربرد Session در PHP
ﺯﻣﺎﻥ ﻣﻄﺎﻟﻌﻪ: 6 دقیقه

مفهوم و کاربرد Session در PHP

هنگامی که شما با یک نرم افزار در محیط ویندوز کار می کنید ، آن را باز کرده و تغییراتی درونش ایجاد نموده و سپس آن را می بندید . به این فرایند یک session یا به بیان فارسی ، جلسه می گویند . 

از ابتدای فرایند تا لحظه ای که آن را به اتمام می رسانید ، ویندوز شما را شناخته و می داند که چه کسی هستید . 

اما در دنیای وب و اینترنت اوضاع فرق دارد . وب سرور سایتی که در حال بازدید از آن هستید ، نمی داند که شما کی هستید . زیرا آدرس HTTP مرورگر به سرور راجع شما اطلاعاتی نمی دهد . بنابراین تمایز کاربران با یکدیگر غیر ممکن شده و سرور با این وضع برای سرویس دهی به آنها دچار مشکل می شود . بنابراین باید چه کرد ؟ راه حل کجاست ؟ 
این مشکل در وب و در زبان PHP به وسیله session حل شده است . 

سرور سایتی که وارد آن می شوید ، اطلاعات شما مثل username , pass را در متغیرهایی به نام session ذخیره می کند . هر بار که صفحه جدیدی از همان سایت را باز می کنید ، سرور اطلاعات session شما را به همراه درخواست صفحه به مرورگر ارسال کرده و بنابراین دیگر نیازی ندارید در هر صفحه اطلاعات کاربری خود را مجددا وارد نمایید . 
این فرایند را تاکنون بارها تجربه کرده و باعث راحتی شما بوده است . اما session چگونه ایجاد و استفاده می شوند .

یک راه برای در دسترس قرار دادن اطلاعات در صفحات مختلف یک وب سایت کامل وجود دارد که آن بهره گیری از عملکرد PHP session است. کاری که session انجام می دهد، به وجود آوردن یک فایل در دایرکتوری موقت بر روی سِرور است، جایی که متغیرهای رجیستر و ثبت شده ی session و مقادیر آن ها نگهداری و ذخیره می شوند. این اطلاعات به هنگام بازدید کاربر، در تمام صفحات سایت آماده و در دسترس است. 

مکان قرارگیری فایل موقتی، توسط تنظیمات واقع در php.ini file که session.save_path خوانده می شود، تعیین می گردد. پیش از استفاده کردن از متغیرهای session، حتماً این مسیر را معلوم کرده و راه اندازی کنید. 

به محض این که session شروع به کار می کند، اتفاقات زیر رخ می دهد:

  • ابتدا PHP یک شناسه گر {identifier} منحصربه فرد برای آن session معین ایجاد می کند، که از رشته عددی تصادفی هگزا دسیمال مانند 3c7foj34c3jj973hjkop2fc937e3443 تشکیل شده است.
  • cookie ای به نام PHPSESSID، خودکار به رایانه ی کاربر فرستاده می شود تا رشته شناسایی منحصر به فرد session را ذخیره کند.
  • فایلی به صورت خودکار در دایرکتوری موقت مشخص شده بر روی سِروِر به وجود می آید که اسم شناسه ی منحصر به فرد دارد و پیشوندش sess_ ie sess_3c7foj34c3jj973hjkop2fc937e3443. است.

هنگامی که اسکریپتPHP بخواهد مقدار را از session variable بازیابی کند، PHP به صورت خودکار رشته شناسایی منحصر به فرد session را از PHPSESSID cookie دریافت می کند و سپس در دایرکتوری موقت به دنبال فایلی که آن نام و عنوان را دارد می گردد. فرایند تایید اعتبار، را می توان با مقایسه دو متغیر انجام داد و نتیجه ی آن را به دست آورد. 

session پس از این که کاربر صفحه را ترک می کند یا مرورگر را می بندد به پایان می رسد. سِرور پس از گذشت زمان مشخص که معمولاً 30 دقیقه است session را خاتمه می دهد.

شروع کردن PHP 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 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 می توان کمک گرفت.

چه امتیازی برای این مقاله میدهید؟

خیلی بد
بد
متوسط
خوب
عالی
3.43 از 7 رای

/@roocketir

باور ما اینست که کاربران ایرانی لایق بهترین‌ها هستند، از این رو ما تمام تلاش خود را می‌کنیم تا بتوانیم فیلم‌ها و مقالات آموزشی بروز و کاربردی را در اختیارتان قرار دهیم تا با استفاده از آنها بتوانید جزء بهترین‌ها در صنعت طراحی و برنامه‌نویسی وب شوید. ما ادعا نمی‌کنیم که بهترین هستیم ولی همیشه تمام تلاش خود را می‌کنیم بهترین عملکرد را به شما ارائه دهیم.

دیدگاه و پرسش

برای ارسال دیدگاه لازم است وارد شده یا ثبت‌نام کنید ورود یا ثبت‌نام

در حال دریافت نظرات از سرور، لطفا منتظر بمانید

در حال دریافت نظرات از سرور، لطفا منتظر بمانید

پشتیبانی راکت

مقالات برگزیده

مقالات برگزیده را از این قسمت میتوانید ببینید

مشاهده همه مقالات