تخفیفات ویژه زمستان ۱۳۹۸ تاپایان: پنجشنبه ۸ اسفند ۱۳۹۸
بزن بریم فروشگاه

سشن ها در php

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

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

 

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

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

زمانی که php میخواهد به یک سشن و اطلاعات آن دسترسی داشته باشد بصورت خودکار آیدی سشن از کوکی 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 استفاده شده است . 

 

اتمام درس