با سلام خدمت شما کاربران محترم ، حال شما خوبه؟ با اموزشی دیگر در زمینه php در خدمت شما هستم این بار درمورد سشن ها میخواهیم توضیح بدهیم .

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

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

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

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

ابتدا PHP یک شناسه گر {identifier} منحصربه فرد برای آن session معین ایجاد می کند، که از رشته عددی تصادفی هگزا دسیمال مانند ۳c7foj34c3jj973hjkop2fc937e3443 تشکیل شده است.

cookie ای به نام PHPSESSID، خودکار به رایانه ی کاربر فرستاده می شود تا رشته شناسایی منحصر به فرد session را ذخیره کند.

فایلی به صورت خودکار در دایرکتوری موقت مشخص شده بر روی سِروِر به وجود می آید که اسم شناسه ی منحصر به فرد دارد و پیشوندش sess_ ie sess_3c7foj34c3jj973hjkop2fc937e3443. است.

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

session پس از این که کاربر صفحه را ترک می کند یا مرورگر را می بندد به پایان می رسد. سِرور پس از گذشت زمان مشخص که معمولاً ۳۰ دقیقه است 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. “;‎

‎?> 

<html> 

<head>

   <title>Setting up a PHP session</title>

</head>

<body>

   <?php  echo ( $msg ); ?>

</body>

</html>

از بین بردن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 بر روی ۱ قراردهید و تنظیم کنید، هنگامی که کاربر از سایت بازدید می کند، دیگر شما نیازی به فراخوانی 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); >”>‎

‎</p>‎

 

همچنین از() htmlspecialchars برای جلوگیری از حملات ناشی از XSS به هنگام پرینت کردن SID می توان کمک گرفت.