کوکی ها استفاده های متعددی دارند اما در سمت سرور معمولا از آن ها برای شناسایی یک کاربر استفاده می شود. کوکی ها از نظر فنی فایل های کوچکی هستند که سرور (یا جاوا اسکریپت) آن ها را در مرورگر کاربر ایجاد می کند. حالا هر بار که این کامپیوتر درخواست صفحه ای را با همان مرورگر (که حاوی کوکی است) بدهد کوکی نیز ارسال می شود. با استفاده از زبان PHP می توانیم هم کوکی ها را ایجاد کرده و هم آن ها را دریافت کنیم. برای ساخت یک کوکی در PHP از تابع ()setcookie
استفاده می کنیم که دارای ساختار کلی زیر است:
setcookie(name, value, expire, path, domain, secure, httponly);
تنها پارامتر الزامی name است، تعیین دیگر پارامتر ها اختیاری است.
مثال زیر یک کوکی به نام user می سازد و مقدار آن را John Doe قرار داده ایم. این کوکی پس از 30 روز (86400 * 30) منقضی می شود (یعنی از بین می رود). علامت /
نیز یعنی این کوکی در تمامی وب سایت در دسترس بوده و محدود به صفحه یا آدرس خاصی نیست (شما می توانید کوکی را به دیرکتوری خاصی محدود کنید).
در آخر مقدار کوکی (مقدار user) را از طریق متغیر سراسری COOKIE_$
دریافت می کنیم. همچنین قبل از دریافت باید از تابع ()isset استفاده کرد تا مطمئن شویم چنین کوکی وجود دارد یا خیر. به مثال زیر توجه کنید:
<!DOCTYPE html> <?php $cookie_name = "user"; $cookie_value = "John Doe"; setcookie($cookie_name, $cookie_value, time() + (86400 * 30), "/"); // 86400 = 1 day ?> <html> <body> <?php if(!isset($_COOKIE[$cookie_name])) { echo "Cookie named '" . $cookie_name . "' is not set!"; } else { echo "Cookie '" . $cookie_name . "' is set!<br>"; echo "Value is: " . $_COOKIE[$cookie_name]; } ?> <p><strong>Note:</strong> You might have to reload the page to see the value of the cookie.</p> </body> </html>
زمانی که برای اولین بار وارد صفحه ی خروجی این کد شوید کوکی ساخته می شود. سپس باید صفحه را refresh کنید (دوباره وارد صفحه شوید) تا کوکی ساخته شده دریافت شود.
مقدار کوکی هنگام ارسال به صورت خودکار URLencoded شده و در هنگام دریافت به صورت خودکار decode می شود. اگر می خواهید چنین اتفاقی نیوفتد باید از تابع ()setrawcookie
استفاده کنید.
نکته ی مهم: تابع ()setcookie
باید حتما قبل از تگ <html> بیاید.
سوال: برای ویرایش یا حذف یک کوکی در PHP چه کار باید کرد؟
پاسخ: ویرایش کوکی ها بسیار آسان است؛ باید آن ها را با استفاده از ()setcookie
دوباره بسازید! به مثال زیر دقت کنید:
<!DOCTYPE html> <?php $cookie_name = "user"; $cookie_value = "Alex Porter"; setcookie($cookie_name, $cookie_value, time() + (86400 * 30), "/"); ?> <html> <body> <?php if(!isset($_COOKIE[$cookie_name])) { echo "Cookie named '" . $cookie_name . "' is not set!"; } else { echo "Cookie '" . $cookie_name . "' is set!<br>"; echo "Value is: " . $_COOKIE[$cookie_name]; } ?> <p><strong>Note:</strong> You might have to reload the page to see the new value of the cookie.</p> </body> </html>
برای حذف کوکی ها نیز از همان تابع ()setcookie استفاده کنید و تاریخ انقضای آن را روی زمان گذشته تنظیم کنید (مثلا دیروز یا پارسال یا ...). به مثال زیر دقت کنید:
<!DOCTYPE html> <?php // set the expiration date to one hour ago setcookie("user", "", time() - 3600); ?> <html> <body> <?php echo "Cookie 'user' is deleted."; ?> </body> </html>
برخی اوقات کاربران کوکی های خود را غیرفعال می کنند. اگر دوست دارید تا قبل از هر کار چک کنید تا مطمئن شوید کوکی های کاربر فعال است یا خیر می توانید ابتدا یک کوکی بی مقدار را برای تست بسازید. سپس تعداد کوکی ها را از COOKIE_$ بشمارید:
<!DOCTYPE html> <?php setcookie("test_cookie", "test", time() + 3600, '/'); ?> <html> <body> <?php if(count($_COOKIE) > 0) { echo "Cookies are enabled."; } else { echo "Cookies are disabled."; } ?> </body> </html>
session ها راهی برای ذخیره ی اطلاعات در متغیرها هستند که در چندین صفحه ی مختلف استفاده شود. زمانی که با یک برنامه ی وب طرف هستید آن را باز می کنید، کارهایی را انجام داده و در آخر آن را میبندید. همین عملیات بسیار شبیه session ها است! در واقع کامپیوتر می داند که شما چه کسی هستید، چه زمانی برنامه را باز کرده و چه زمانی آن را بسته اید اما در بستر اینترنت مشکلی وجود دارد: سرور نمی داند شما چه کسی هستید چرا که HTTP نمی تواند وضعیت را همیشه فعال نگه دارد؛ شما هنگام خاموش کردن مودم از اینترنت جدا می شوید!
session ها این مشکل را از طریق ذخیره ی اطلاعات (یوزرنیم، رنگ مورد علاقه و ...) بین صفحات مختلف حل کرده اند. session ها برخلاف کوکی ها در کامپیوتر کاربر ذخیره نمی شوند و تا زمانی وجود دارند که کاربر پنجره ی مرورگر را نبسته باشد. زمانی که کاربر مرورگر خود را ببندد session نیز از بین می رود.
session ها با استفاده از تابع ()session_start
در PHP شروع شده و در SESSION_$
ذخیره می شوند. برای کار با session ها صفحه ی جدیدی به نام demo_session1.php می سازیم تا در آن چند session ایجاد کنیم:
<?php // Start the session session_start(); ?> <!DOCTYPE html> <html> <body> <?php // Set session variables $_SESSION["favcolor"] = "green"; $_SESSION["favanimal"] = "cat"; echo "Session variables are set."; ?> </body> </html>
تابع ()session_start
باید اولین چیز در سند شما باشد، قبل از هر تگ HTML دیگری!
حالا یک صفحه ی دیگر به نام demo_session2.php می سازیم تا به Session ها دسترسی داشته باشیم. حتما شما هم متوجه شده اید که Session ها به طور جداگانه و تک تک به صفحات ارسال نمی شوند بلکه از همان نشست اولیه (()session_start
) دریافت می شوند. همچنین باید بدانید که تمام session ها در متغیر سراسری SESSION_$
ذخیره می شوند.
<?php session_start(); ?> <!DOCTYPE html> <html> <body> <?php // Echo session variables that were set on previous page echo "Favorite color is " . $_SESSION["favcolor"] . ".<br>"; echo "Favorite animal is " . $_SESSION["favanimal"] . "."; ?> </body> </html>
یک راه دیگر برای نمایش session ها به کاربر استفاده از کد زیر است:
<?php session_start(); ?> <!DOCTYPE html> <html> <body> <?php print_r($_SESSION); ?> </body> </html>
نحوه ی کار session ها بدین شکل است که یک کلید خصوصی در کامپیوتر کاربر ایجاد می کنند که شبیه این کلید است: 765487cf34ert8dede5a562e4f3a7e12. سپس زمانی که یک Session در صفحه ی دیگری باز می شود به دنبال این کلید میگردد. اگر چیزی پیدا کرد به آن session دسترسی پیدا می کند و در غیر این صورت یک session جدید می سازد.
مانند کوکی ها برای ویرایش یک Session باید آن را overwrite کنید:
<?php session_start(); ?> <!DOCTYPE html> <html> <body> <?php // to change a session variable, just overwrite it $_SESSION["favcolor"] = "yellow"; print_r($_SESSION); ?> </body> </html>
برای حذف session ها نیز می توانید از تابع ()session_unset
یا ()session_destroy
استفاده کنید:
<?php session_start(); ?> <!DOCTYPE html> <html> <body> <?php // remove all session variables session_unset(); // destroy the session session_destroy(); echo "All session variables are now removed, and the session is destroyed." ?> </body> </html>
امیدوارم از این قسمت لذت برده باشید.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.