سشن ها در php
آموزش سشن ها در زبان php

سشن ها در زبان php یک سری فایل ها هستند که بصورت موقتی سمت سرور ایجاد میشوند و برای هر کاربر که به وب سایت شما مراجعه میکند میتوانند منحصر به فرد باشند. 

سشن ها داده هایی هستند که در تمامی بخش های ساخت یک وب سایت با php قابل دسترسی هستند . سشن ها در یک دایرکتوری موقتی ایجاد میشوند که این دایرکتوری در php.ini  با نام session.save_path موجود است . قبل از استفاده از سشن ها از دایرکتوری موقتی مطمئن شوید که تنظیم شده باشد . 

 

زمانی که یک سشن شروع میشود اتفاقات زیر رخ میدهد : 

  • در ابتدا زبان php یک آیدی اختصاصی برای سشن در نظر میگیرید که معمولا یک رشته ی تصادفی از اعداد نوع 32 hexadecimal  می باشد مانند : 3c7foj34c3jj973hjkop2fc937e3443 
  • یک کوکی با نام PHPSESSID  به کامپیوتر کاربر ارسال میشود تا آیدی اختصاصی سشن را نگهداری کند . 
  • یک فایل موقتی سمت سرور ساخته میشود که اطلاعات سشن را نگهداری کند و نام آن همان آیدی ساخته شده در مرحله ی اول میباشد با این تفاوت که یک پیشوند sess_ ie sess_ به آن اضافه میشود مانند : sess_ ie sess_3c7foj34c3jj973hjkop2fc937e3443 .

زمانی که زبان پی اچ پی میخواهد به یک سشن و اطلاعات آن دسترسی داشته باشد بصورت خودکار آیدی سشن از کوکی PHPSESSID  فراخوانی میشود و سپس به فایل موقتی سشن ها نگاه میکند تا ببیند با این آیدی فایل سشن وجود دارد یا نه . 

یک سشن ممکن است با بسته شدن مرورگر یا خروج از یک وب سایت نابود شود یا اینکه میتواند مدت زمان مشخصی داشته باشد یا اینکه خود کاربر آنرا نابود کند ( برای مثال زمانی که کاربر دکمه ی خروج سایت را میزند ) . 

 

شروع یا استارت یک سشن در php

در زبان برنامه نویسی php به سادگی هر چه تمام تر میتوانید سشن ها را با استفاده از تابع session_start شروع کنید . این تابع چک میکند تا ببیند اگر قبلا سشن استارت نشده باشد برای یکبار سشن را استارت میکند . 

پیشنهاد میشود که session_start را در بالا یا شروع کدهای اسکریپت php خود قرار دهید

داده های سشن درون متغیر $_SESSION[] ذخیره میشوند و به سادگی قابل بازیابی هستند البته تا زمانی که سشن عمر دارد و هنوز نابود نشده است . 

در مثال زیر یک سشن را استارت میکنیم و یک سشن جدید به نام counter ایجاد میکنیم که مقدار بازدید صفحه را ذخیره میکند و با هر بار ریفرش کردن صفحه یک مقدار به counter اضافه میشود . 

نکته : قبل از اینکه از سشن ها استفاده کنید با استفاده از تابع isset مطمئن شوید که از قبل ایجاد و مقدار دهی شده است . 

کدهای زیر را در یک فایل به نام test.php ذخیره کنید و سپس اجرا کنید و با هر بار ریفرش کردن صفحه باید مقدار بازدید صفحه زیاد شود .

<?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.";
?>

<html>
   
   <head>
      <title>Setting up a PHP session</title>
   </head>
   
   <body>
      <?php  echo ( $msg ); ?>
   </body>
   
</html>

نتیجه ی کدهای بالا برای اولین بار بازدید رشته ی زیر خواهد بود : 

You have visited this page 1in this session.

 

نابود کردن یا destroy کردن یک سشن در php

در زبان php یک سشن بصورت کامل توسط تابع session_destroy نابود میشود . این تابع هیچ آرگومان ورودی ندارد و به سادگی صدا زده میشود و تمام سشن ها را از بین میبرد ولی اگر شما قصد دارید یک سشن خاص را نابود کنید نه همه ی سشن ها را ، تابع unset را صدا بزنید و نام سشن را برای آن ارسال کنید . 

در مثال زیر میبینید که سشن مثال بالا با نام counter را به تنهایی از بین میبریم : 

<?php
   unset($_SESSION['counter']);
?>

و در مثال پائین تمامی سشن ها با تمامی مقادیر ذخیره شده را نابود میکنیم : 

<?php
   session_destroy();
?>

 

شروع یا استارت کردن سشن بصورت خودکار در php 

اگر قصد دارید بدون نیاز به صدا زدن تابع start_session سشن را در همه جای اسکریپت خود ، شروع کنید کافیست به فایل php.ini بروید و مقدار متغیر session.auto_start را به 1 تغییر دهید .

 

سشن بدون نیاز به کوکی ها در php

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

جایگزین استفاده از کوکی ها ، استفاده از SID ثابت میباشد که هنگام استارت کردن سشن تعریف میشود، اگر کاربر کوکی مورد نیاز سشن را ارسال نکند بصورت 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); ?>">
</p>

نتیجه ی مثال بالا کدهای زیر خواهد بود   : 

You have visited this page 1in this session.
To continue click following link 

تابع htmlspecialchars برای جلوگیری از حملات xss استفاده شده است . 

نکته : شما در حال گذراندن آموزش زبان برنامه نویسی پی اچ پی هستید.بعد از اتمام یادگیری پی اچ پی یکی از مواردی که حتما نیاز است تا به آن توجه کنید بحث mvc در زبان php است.

اتمام درس