همان گونه که در جلسه قبل به شما قول داده بود، در این جلسه قرار است مبحث بسیار مهم آرایه فوق سراسری سشن (session) و کوکی (cookie) را به طور کامل شرح می دهم. در ابتدا cookie را معرفی می کنم، چون تا زمانی که درک درستی از cookie نداشته باشید، session را درک نمی کنید.
cookie اغلب برای شناسایی کاربر استفاده می شود. cookie یک فایل کوچک است که سرور بر روی کامپیوتر کاربر جاسازی می کند، هر بار که یک کامپیوتر یک صفحه را با یک مرورگر درخواست می کند، کوکی را نیز ارسال می کند. معمولا از cookie ها برای کاربردهایی همچون شناسه کاربری، رمز عبور، تنظیمات یک کاربر بر روی سایت و ... استفاده می شود
با php می توان یک cookie را ایجاد و بازیابی کرد. وقتی که یک کاربر از یک سایت برای چندمین بار بازدید می کند، مرورگر، اطلاعات موجود در cookie را به سرور می فرستد.
به عنوان مثال در نظر بگیرید که در یک تالار گفتگو (فروم) عضو شده اید و یک password و username را برای خودتان مشخص کرده اید. وقتیکه برای بار اول اطلاعات کاربری خود را در مرورگر وارد می کنید، این اطلاعات، درون یک cookie بر روی مرورگر کامپیوتر شما ذخیره می شود. و اگر باز به همان سایت بروید، خواهید دید که مرورگر، اطلاعات کاربری شما را خودش وارد کرده و شما login شده اید، بدون اینکه خودتان کاری انجام داده باشید.
دانستن اینکه cookieها در کجا ذخیره می شوند، با توجه به هر مرورگر فرق دارد. به عنوان مثال در تصویر زیر مکان ذخیره شدن cookie ها در مرورگر firefox برای شما آورده شده است.
حقیقت این است که مرورگر firefox از cookieها برای ایجاد، ذخیره و ارسال مجدد اطلاعات به سرور استفاده کرده است.
زبان برنامه نویسی php این امکان را فراهم آورده است که شما به سادگی می توانید برای خودتان cookie هایی را ایجاد نمایید و مجددا آنها را دریافت و ارسال نمایید. در ادامه قصد داریم شما را با نحوی ایجاد و خواندن cookie ها در زبان php آشنا نماییم.
برای ساختن و ذخیره یک cookie از تابع setcookie() در زبان برنامه نویسی php استفاده می شود. نحوی تعریف cookie و پارامترهایی که تابع setcookie() مورد استفاده قرار می دهد، به شرح زیر می باشد:
setcookie(name, value, expire, path, domain, secure, httponly);
در کد بالا فقط پارامتر name اجباری است و سایر پارامتر ها اختیاری هستند.
نکته: به پارامتر expire دقت کنید، این پارامتر مشخص می کند که cookie تا چه زمانی اعتبار دارد، و بعد از تمام شدن زمان تعیین شده، cookie اعتبار خود را از دست می دهند.
برای اینکه بهتر با عملکرد cookie ها آشنا شوید به مثال زیر دقت کنید.
ابتدا تمام cookie های مرورگر (در اینجا firefox) را پاک می کنیم:
سپس یک فایل با نام Cookie.php در مسیر C:\wamp\www ایجاد کنید:
حال با استفاده از Notepad++ ، فایل بالا را باز کرده و کدهای زیر را در داخل آن بنویسید و ذخیره نمایید:
<?php setcookie('Username','JahangirPachkam'); ?>
سپس firefox را باز کنید و به آدرس http://localhost/Cookie.php بروید. به تصویر زیر دقت کنید و ببینید که cookie ما درست شده است:
با توجه به شکل بالا، یک کوکی با نام Username و مقدار JahangirPachkam ایجاد شده است، ولی با توجه به اینکه ما برای این کوکی طول عمر تعریف نکرده ایم (Expire)، این کوکی پعد از بسته شدن مرورگر پاک می شود. برای جلوگیری از این کار یک زمان انقضا به صورت دستی برای آن تعریف می کنیم:
<?php setcookie('Username','JahangirPachkam',time()+60); ?>
در کد بالا با استفاده از تابع time() که تاریخ فعلی سرور را مشخص می کند و عدد 60 (ثانیه) ، مشخص کرده ایم که اطلاعات کاربر از لحاظ ورودی تا 1 دقیقه بعد در کوکی ذخیره و بعد از آن حذف می شود.
حال فرض کنید که کاربر مرورگر را می بندد و قبل از پایان اعتبار کوکی که در این مثال یک دقیقه است دوباره مرورگر را باز کرده و به سایت سر می زند. این بار سرور محتویات فایل کوکی را خوانده و کاربر و تنظیمات او را تشخیص می دهد و دیگر اعتبار سنجی نمی کند. پس از ایجاد و مقدار دهی کوکی، مرورگر باید بتواند از کوکی و محتویات آن استفاده کند.
آرایه سراسری $_COOKIE برای به دست آوردن مقدار کوکی به کار می رود.
کد بالا را به صورت زیر تغییر دهید و آنرا در مرورگر اجرا کنید:
<?php setcookie('Username','JahangirPachkam',time()+60); echo $_COOKIE["Username"]; ?>
همانطور که در شکل بالا مشاهده می کنید برای به دست آوردن مقدار یک کوکی کافیست نام آن را (در این مثال Username) به آرایه سراسری $_COOKIE بدهیم.
در نتیجه مقدار آن که در این مثال jahangir است در مرورگر چاپ می شود. البته مقدار JahangirPachkam تا زمانی قابل شناسایی توسط سرور است که کوکی منقضی نشده باشد که در این مثال تا قبل از یک دقیقه است.
حال اگر بعد از گذشت یک دقیقه صفحه را Refresh کنید، چون کوکی پاک می شود، در نتیجه با پیغام خطای زیر مواجه می شوید.
session (سشن یا جلسه) به ما اجازه می دهد که در سمت سرور مقادیری را ذخیره کرده و از آنها در صفحات مختلف استفاده کنیم. این کار توسط یک آرایه فوق سراسری به نام $_SESSION انجام می شود.
نمونه بارز استفاده از Session ها را می توان به هنگام وارد شدن به یک سایت (لاگین شدن) مشاهده کرد. به طوریکه وقتی وارد یک سایت می شوید و صفحات مختلف آن را مرور می کنید نام کاربری شما در کل صفحات در دسترس و قابل مشاهده است. فرایند ذخیره سازی داده ها و استفاده از آنها در Session به صورت زیر است:
۱) کاربر از طریق مرورگر یک درخواست می فرستد.
۲) با فرض اینکه این درخواست ارسال نام کاربری و کلمه عبور برای ورود به سایت باشد، یک فایل تصادفی و منحصر به فرد با پسوند _sess در سرور و در پوشه tmp ایجاد می شود.
۳) با ایجاد فایل در پوشه tmp ، سرور یک کوکی در داخل مرورگر ایجاد و رشته 32 رقمی و یکتا را داخل آن قرار می دهد و این رشته 32 رقمی را SID یا Session ID می نامند و نامی که برای آن در کوکی اختصاص داده می شود، PHPSESSID (به صورت پیش فرض) می باشد:
$_COOKIE['PHPSESSID'];
۴) برای خواندن اطلاعات از فایلی که در سرور ایجاد شده است (فایل با پسوند _sess) مرورگر با هر بار درخواست ، این ID را به سرور ارسال کرده و سرور هم فایل مخصوص آن را از داخل پوشه tmp پیدا و مقادیر داخل آن را می خواند.
تنظیمات پیش فرض Session در فایل php.ini به صورت زیر است:
برای تغییر این تنظیمات ابتدا فایل php.ini را باز و سپس به گزینه هایی که در تصاویر زیر آورده شده دقت کنید:
اجازه بدهید که نحوی ایجاد و استفاده از session را توضیح دهیم.
ایجاد session بسیار ساده است و با استفاده از متد session_start() انجام می شود.
وقتی که این متد فراخوانی می شود، یک فایل session در سرور و کوکی معادل آن که دارای رشته 32 رقمی SID است در مرورگر کاربر ایجاد می شود.
اگر این کوکی از قبل وجود داشته و توسط مرورگر ارسال شده باشد، متد session_start() از این داده ها استفاده می کند و کوکی جدیدی ایجاد نمی کند. برای فراخوانی این متد حتما باید در اولین خط اسکریپت خود بنویسیم:
<?php // Start the session session_start(); ?>
همانطور که اشاره شد، برای اعتبار سنجی کاربر و ارسال SID به سرور، سشن هم از کوکی استفاده می کند.
حال اگر کاربر کوکی های مرورگر را غیر فعال نمایید، SESSION این کار را چگونه انجام می دهد؟ اگر یک لینک به صفحه مورد نظر داشته باشید، PHPSESSID را به صورت زیر اضافه می کند:
<a href="page.php?PHPSESSID=b8306b025a76a250f0428fc0efd20a11">Other Page</a>
اگر از طریق همین لینک مقادیر دیگری هم ارسال شود، PHPSESSID به صورت زیر اعمال می شود:
<a href="page.php?id=1&PHPSESSID=b8306b025a76a250f0428fc0efd20a11">Other Page</a>
و اگر اطلاعات قرار است از طریق فرم ارسال شوند، PHPSESSID از طریق یک تگ input با خاصیت hidden ارسال می شود:
<form action=" " method=" "> <input type="hidden" name="PHPSESSID" value="b8306b025a76a250f0428fc0efd20a11" /> </form>
کار با داده های session بسیار راحت است. برای اینکار داده ها را به صورت کلید/مقدار در آرایه فوق سراسری $_SESSION ذخیره می کنید. در session بر خلاف cookie که از تابع setCookie() برای ذخیره داده ها استفاده می کردید، چنین تابعی وجود ندارد و شما مستقیما می توانید یک نام دلخواه به عنوان کلید برای داده های که می خواهید ذخیره کنید، انتخاب نمایید.
مثلا در زیر نام یک شخص را در یک session ذخیره کردیم:
$_SESSION["firstName"] = "jahangir"; $_SESSION["LastName"]="pachkam";
در کد بالا، کلیدها به ترتیب firstName و LastName می باشد و مقدارهای متناظر هر کلید هم به ترتیب jahangir و pachkam می باشد. برای خواندن این سشن هم مانند آرایه ها کافی است که از دستور echo برای چاپ این مقدار استفاده کنیم:
echo ($_SESSION["firstName"] $_SESSION["LastName"]);
با اجرای دستور بالا مقدار jahangir pachkam چاپ می شود.
سشن برخلاف کوکی دارای طول عمر نیست، یعنی با بسته شدن مرورگر اطلاعات سشن هم پاک می شوند. گاهی اوقات لازم است که شما فورا سشن را پاک کنید. مثلا وقتی که کاربر از طریق سایت شما یک خرید انجام داده است و بدون اینکه مرورگر ببندد می خواهد دوباره یک خرید دیگر انجام دهد و شما می خواهید اطلاعات خرید قبلی را پاک کنید. برای پاک کردن سشن از تابع زیر استفاده می شود:
<?php session_destroy();?>
کد بالا تمام اطلاعات موجود در session را حذف می کند، ولی اگر بخواهیم فقط اطلاعات یک session خاص ، مثلا firstName را پاک کنید، می توانید از تابع unset() استفاده نمایید:
unset ($_SESSION["firstName"]);
در پایان انتظار دارم که مباحث بالا را با تکرار و دیدن مثالهای متنوع تر به طور کامل ملکه ذهن خودتان کنید، چرا که در قسمتهای آینده با sessionها خیلی کار داریم.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.