آموزش PHP

آموزش PHP - sessionها

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

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

محل فایل موقت توسط یک تنظیم در فایل php.ini به نام session.save_path تعیین می شود. قبل از استفاده از هر متغیر session اطمینان حاصل کنید که این مسیر را راه اندازی کرده اید.

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

  • ابتدا PHP یک شناسۀ منحصر به فرد برای آن session خاص ایجاد می کند که یک رشته تصادفی از 32 عدد هگزادسیمال مانند 3c7foj34c3jj973hjkop2fc937e3443 است.
  • یک کوکی به نام PHPSESSID به صورت خودکار به رایانه کاربر ارسال می شود تا یک رشته شناسایی session منحصر به فرد را ذخیره کند.
  • یک فایل به طور خودکار بر روی سرور در دایرکتوری موقت تعیین شده ایجاد می شود و نام شناسۀ منحصر به فرد را با پیشوند sess_ یعنی sess_3c7foj34c3jj973hjkop2fc937e3443 نامگذاری می کند.

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

زمانی که کاربر مرورگر را از دست می دهد یا پس از خروج از سایت، session به پایان می رسد سرور پس از یک دوره از زمان تعیین شده، معمولا 30 دقیقه طول می کشد.

شروع یک session در PHP

یک session  در PHP به راحتی با برقراری فراخوانی به ()session_start آغاز می شود. این تابع ابتدا بررسی می کند که آیا یک session در حال آغاز است و اگر هیچ کدام شروع نشده باشد، شروع می شود. توصیه می شود که فراخوانی ()session_start در ابتدای صفحه قرار دهید. 

متغیرهای session  در آرایه associative به نام  $_SESSION[] ذخیره می شوند. این متغیرها را می توان در طول عمر یک session  مشاهده کرد. 

مثال زیر یک session  را شروع می کند و سپس یک متغیر به نام counter می دهد که هر بار که صفحه در طول session  بازدید شد، افزایش یابد. 

از تابع ()isset برای بررسی اینکه آیا متغیر session  در حال حاضر تنظیم شده است یا نه، استفاده کنید. 

این کد را در یک فایل 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.

 

از بین بردن یک session در PHP

session  در PHP می تواند توسط ()session_destroy انجام شود. این تابع نیازی به هیچ آرگومانی ندارد و یک فراخوانی تنها می تواند تمام متغیرهای session  را از بین ببرد. اگر می خواهید یک متغیر session را از بین ببرید، می توانید از تابع ()unset برای تنظیم یک متغیر session استفاده کنید.

مثال زیر برای یک متغیر unset است:

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

در اینجا فراخوانی تمام متغیرهای session را از بین می برد:

<?php
   session_destroy();
?>

 

روشن کردن خودکار session

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

 

session بدون کوکی

ممکن است یک مورد وجود داشته باشد که کاربر اجازه ذخیره کوکی ها را در دستگاه خود نمی دهد. بنابراین روش دیگری برای ارسال session ID به مرورگر وجود دارد.

متناوبا، می توانید از SID ثابت استفاده کنید که در صورت شروع session  تعریف شده است. اگر مشتری یک cookie session مناسب ارسال نکند و دارای فرم 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 هنگام چاپ SID برای جلوگیری از حملات مربوط به XSS استفاده شود.

در صورتی که سوال و یا نظری دارید، از بخش نظرات با ما در میان بگذارید.

خبـرنــامه

Newsletters

در خبــرنـامه سافت اسکیل عضو شویــد تا جدیدترین هـای سایت را بلافاصله در ایمیل خـود دریافت کنیـد

شما چه نظر و یا سوالی درباره این نوشته دارید؟

مبحث آموزشی

آموزش PHP

Learn PHP

سرفصل ها

پرســیدن سؤال جدید

سؤال های تخصصی خود را از ما بپرسید

دنبال کردن تلگرام کانال سافت اسکیل

https://telegram.me/softskill_ir

عملیات کاربران

خبـرنــامه

Newsletters

در خبــرنـامه سافت اسکیل عضو شویــد تا جدیدترین هـای سایت را بلافاصله در ایمیل خـود دریافت کنیـد

کلیک کنید و سوالات خود را از ما بپرسید
لطفا فرم سوال را پر کنید

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

لطفا چند لحظه منتظر بمانید ...