نماد سایت تیک۴

کار با کوکی session در PHP

در این آموزش موارد زیر را برسی خواهیم کرد:

کوکی چیست ؟

کوکی یک قطعه اطلاعات است که سرور بر روی کامپیوتر کاربر ذخیره کرده و در مراجعات کاربر به همان سایت ، از آن اطلاعات برای شناسایی وی استفاده می کند . این اطلاعات معمولا راجع به شناسه کاربری ، رمز عبور ، تنظیمات یک کاربر بر روی سایت و … می باشد.

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

برای مثال فرض کنید که در یک سایت فروم عضو شده و یک رمز عبور و شناسه کاربری را برای خود تعیین کرده اید . هنگامی که برای اولین بار اطلاعات کاربری خود را در مرورگر وارد می کنید ، این اطلاعات در یک کوکی بر روی مرورگر کامپیوتر شما ذخیره می شود . هنگامی که در مراجعه بعدی به همان سایت می روید ، متوجه می شوید که مرورگر اطلاعات کاربری شما را وارد نموده و شما log in شده اید ، بدون اینکه خودتان کاری انجام داده باشید . در واقع مرورگر از کوکی برای ایجاد ، ذخیره و ارسال مجدد این اطلاعات به سرور استفاده کرده است.

مرورگر ها معمولا برای ایجاد و دخیره کوکی ها از کاربر سوال کرده و یا گزینه ای را جهت ایجاد آن قرار می دهند . پس از تایید کاربر اقدام به ایجاد و ذخیره کوکی ها می نمایند.

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

 

ایجاد کوکی ( cookie ) در PHP :

از تابع ( ) setcookie برای ایجاد و ذخیره یک کوکی در زبان PHP استفاده می شود . برای ایجاد یک کوکی تعیین چند چیز مهم است :

نام

مقدار

مدت زمان اعتبار *

* نکته: توجه داشته باشید که کوکی ها پس از یک مدت زمان تعیین شده ، اعتبار خود را از دست می دهند و باید دوباره فراخوانی شوند . در این حالت می گوییم ، کوکی expire شده است .

برای مثال فرض کنید در یک سایت login کرده اید . سپس کامپیوتر و مرورگر خود را برای مدتی رها می کنید ( مرورگر و صفحه جاری را نمی بندید ) . پس از مراجعه دوباره متوجه می شوید ، که مرورگر شما را logout کرده است و دوباره باید وارد شوید . دلیل این مسئله پایان یافتن مدت زمان اعتبار یک کوکی است .

شکل کلی تعریف و ایجاد یک کوکی به وسیله تابع ( ) setcookie در PHP به صورت زیر است :

<?php

    setcookie ( name , value , expire , path , domain ) ;

?>

 

name: پارامتر name تعیین کننده نام کوکی است . از این نام برای بازیابی و فراخوانی کوکی در سطح برنامه استفاده می شود .

value: پارامتر value مقدار کوکی را تعیین می کند .این مقدار بر روی کامپیوتر ذخیره می شود .

expire: برای تعیین مدت زمان اعتبار کوکی ، معمولا از تابع ( ) time استفاده می شود .  پارامتر expire تعیین کننده مدت زمان اعتبار کوکی ، بر حسب ثانیه است . پس از اتمام این مدت زمان ، کوکی از بین خواهد رفت .

path: این پارامتر تعیین کننده مسیری بر روی سرور سایت است که کوکی در آن ، قابل دریافت و ذخیره است.

برای مثال اگر مقدار آن برابر با ‘/’ تعیین شود ، در تمام سایت قابل دسترسی است . اما اگر روی مقدار /en/’ تنظیم شود ، فقط در دایرکتوری en در سایت قابل دسترسی است .

تعیین این پارامتر اختیاری است.  

domain: پارامتر domain ، دامنه ای که کوکی بر روی آن قابل دسترس است را تعیین می کند.

برای مثال اگر مقدار آن ‘www.DeveloperStudio.ir’ تنظیم شود ، فقط در این دامنه قابل دسترسی است .

تعیین این پارامتر اختیاری است.

 

مثال های عملی :

در مثال های زیر نحوه ایجاد چند کوکی را با پارامترهای مختلف به شما نمایش داده ایم :

مثال ۱: در مثال زیر یک کوکی به نام info با مقدار Mehrdad را ایجاد کرده ایم ، که برای مدت یک ساعت ( ۳۶۰۰ ثانیه ) اعتبار دارد . به کد مثال دقت نمایید :

<?php

    setcookie ( " info ", " Mehrdad ", time( )+3600 ) ;
?>

مثال ۲ : در مثال دوم یک کوکی دیگر ایجاد کرده ایم ، که برای مدت یک سال اعتبار داشته ، ولی فقط در دامنه www.DeveloperStudio.ir اعتبار دارد :

<?php

    $ expire = time( ) + 60 * 60 * 24 * 30 ;

    setcookie ( " info2 ", " Developer ", $expire , 'www.developerstudio.ir' ) ;

?>

خواندن کوکی در PHP :

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

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

توسط متغیر سراسری COOKIE_$ در PHP و به وسیله نام کوکی ، می توان آن کوکی را خوانده و اطلاعات آن را استفاده نمود .

شکل کلی خواندن یک کوکی در PHP به صورت زیر است :

 

<?php

    $_COOKIE ( نام کوکی ) ;

? >

Example : خواندن یک کوکی به نام user

< ? php

    $_COOKIE ( user ) ;

?>

 

خواندن تمام کوکی های یک صفحه :

توسط دستور زیر می توان تمام کوکی های موجود در یک صفحه را خوانده و سپس در خروجی نمایش داد :

<?php

    print_r ( $_COOKIE ) ;

?>

 

حذف یک کوکی :

برای حذف یک کوکی از همان دستور setcookie که برای ایجاد آن استفاده کردیم ، استفاده می شود . با این تفاوت که برای حذف یک کوکی باید ۲ کار را انجام داد :

اول اینکه مقدار خالی به کوکی داده شود .

دوم اینکه زمان اعتبار کوکی را به زمانی قبل از زمان جاری برد . برای مثال ، اعتبار آن را به یک ساعت قبل برد .

برای مثال در کد زیر یک کوکی ایجاد شده به نام user را با دادن مقدار خالی و بردن اعتبار آن به زمان قبل ، از بین برده ایم :

 

<?php

    setcookie ( "user" , " " , time( )-3600 ) ;

?>

 

اگر مرورگر کوکی را پشتیبانی نکرد ، چه کنیم :

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

البته این نکته را هم ذکر کنیم که تمام مرورگر های مطرح امروزی از کوکی ها به طور کامل پشتیبانی می کنند .


مفهوم session :

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

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

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

این مشکل در وب و در زبان PHP به وسیله session حل شده است .

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

این فرایند را تاکنون بارها تجربه کرده و باعث راحتی شما بوده است . اما session چگونه ایجاد و استفاده می شوند .

 

نحوه تعریف session بر روی سرور :

سرور سایت ، در لحظه ورود کاربر به سایت و وارد نمودن اطلاعات کاربری ، یک seesion با یک شناسه خاص ( unique ID – UID ) برای وی ساخته و اطلاعات وی را در آن session ذخیره می کند . این اطلاعات تا زمانی که کاربر در سایت است و یا اعتبار session از بین نرفته ، بر روی سرور ذخیره شده و در مرورگر به صورت کوکی تعریف شده اند .

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

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

 

اکنون پس از تعریف مفهوم seesion ، قصد داریم تا شما را با نحوه تعریف و استفاده از session در PHP ، آشنا نماییم .

 

نحوه تعریف session در PHP :

برای ایجاد session در یک صفحه PHP ، ابتدا باید تابع ( ) session_startup را قبل از تگ < head > در صفحه ، تعریف نمایید . به صورتی که در جدول زیر نمایش داده ایم :

این کد session کاربر را در سرور ثبت کرده ، به شما اجازه می دهد که عملیات session را شروع نموده و یک UID برای شما ایجاد می کند .

<?php  session_start( ); ?>

< html >

  < head >

  < /head >

  < body >

  < /body >

< /html >

پس از آماده نمودن مقدمات ، نحوه دستوری مقداردهی و سپس خواندن یک session در PHP را در جدول زیر در قالب یک مثال نمایش داده ایم . این روش روش استاندارد مقدار دهی و خواندن یک session در PHP است .

در مثال زیر یک session به نام views ، ابتدا مقدار دهی شده و سپس در درون صفحه بازخوانی شده است :

 

<?php  

session_start( )   ;

  // را مقدار دهی می کند session کد زیر یک

  $_SESSION [ 'views' ] = 1 ;

 ?>

< html >

  < head >

  < /head >

  < body >

    <?php

      // را می خواند session کد زیر مقدار

      echo " Pageviews = " . $_SESSION [ 'views' ] ;

    ?>

  < /body >

< /html >

 

مثال : در مثال دوم کدی طراحی شده است که به وسیله متغیر session به نام views ، تعداد دفعات مشاهده یک صفحه را نمایش می دهد . این دستود ابتدا مقدار این session را بررسی کرده و در صورتی که مقدار دهی نشده باشد ( یعنی کاربر اولین بار وارد صفحه شده است ) ، مقدار آن را برابر با ۱ قرار می دهد . اما اگر از قبل مقدار دهی شده باشد ، یعنی کاربر قبلا به صفحه سر زده است . بنابراین یک واحد به مقدار آن اضافه می کند :

<?php

  session_start( )   ;

  if ( isset ( $_SESSION [ 'views '] ) )

      $_SESSION [ 'views' ] = $_SESSION [ 'views' ] + 1 ;

  else

      $_SESSION [ 'views' ] = 1 ;

      echo "Views = " . $_SESSION [ 'views' ] ;

?>

 

خروج از نسخه موبایل