کوکی ها (cookie) و session ها در PHP 7

PHP 7 Cookies & Sessions

2 296

کوکی ها استفاده های متعددی دارند اما در سمت سرور معمولا از آن ها برای شناسایی یک کاربر استفاده می شود. کوکی ها از نظر فنی فایل های کوچکی هستند که سرور (یا جاوا اسکریپت) آن ها را در مرورگر کاربر ایجاد می کند. حالا هر بار که این کامپیوتر درخواست صفحه ای را با همان مرورگر (که حاوی کوکی است) بدهد کوکی نیز ارسال می شود. با استفاده از زبان PHP می توانیم هم کوکی ها را ایجاد کرده و هم آن ها را دریافت کنیم. برای ساخت یک کوکی در  PHP از تابع ()setcookie استفاده می کنیم که دارای ساختار کلی زیر است:

تنها پارامتر الزامی name است، تعیین دیگر پارامتر ها اختیاری است.

مثال زیر یک کوکی به نام user می سازد و مقدار آن را John Doe قرار داده ایم. این کوکی پس از 30 روز (86400 * 30) منقضی می شود (یعنی از بین می رود). علامت / نیز یعنی این کوکی در تمامی وب سایت در دسترس بوده و محدود به صفحه یا آدرس خاصی نیست (شما می توانید کوکی را به دیرکتوری خاصی محدود کنید).

در آخر مقدار کوکی (مقدار user) را از طریق متغیر سراسری COOKIE_$ دریافت می کنیم. همچنین قبل از دریافت باید از تابع ()isset استفاده کرد تا مطمئن شویم چنین کوکی وجود دارد یا خیر. به مثال زیر توجه کنید:

مشاهده ی خروجی

زمانی که برای اولین بار وارد صفحه ی خروجی این کد شوید کوکی ساخته می شود. سپس باید صفحه را refresh کنید (دوباره وارد صفحه شوید) تا کوکی ساخته شده دریافت شود.

مقدار کوکی هنگام ارسال به صورت خودکار URLencoded شده و در هنگام دریافت به صورت خودکار decode می شود. اگر می خواهید چنین اتفاقی نیوفتد باید از تابع ()setrawcookie استفاده کنید.

نکته ی مهم: تابع ()setcookie باید حتما قبل از تگ <html> بیاید.

حذف یا ویرایش کوکی در PHP

سوال: برای ویرایش یا حذف یک کوکی در PHP چه کار باید کرد؟

پاسخ: ویرایش کوکی ها بسیار آسان است؛ باید آن ها را با استفاده از ()setcookie دوباره بسازید! به مثال زیر دقت کنید:

مشاهده ی خروجی

برای حذف کوکی ها نیز از همان تابع ()setcookie استفاده کنید و تاریخ انقضای آن را روی زمان گذشته تنظیم کنید (مثلا دیروز یا پارسال یا …). به مثال زیر دقت کنید:

مشاهده ی خروجی

برخی اوقات کاربران کوکی های خود را غیرفعال می کنند. اگر دوست دارید تا قبل از هر کار چک کنید تا مطمئن شوید کوکی های کاربر فعال است یا خیر می توانید ابتدا یک کوکی بی مقدار را برای تست بسازید. سپس تعداد کوکی ها را از COOKIE_$ بشمارید:

مشاهده ی خروجی

نشست (session) چیست؟

session ها راهی برای ذخیره ی اطلاعات در متغیرها هستند که در چندین صفحه ی مختلف استفاده شود. زمانی که با یک برنامه ی وب طرف هستید آن را باز می کنید، کارهایی را انجام داده و در آخر آن را میبندید. همین عملیات بسیار شبیه session ها است! در واقع کامپیوتر می داند که شما چه کسی هستید، چه زمانی برنامه را باز کرده و چه زمانی آن را بسته اید اما در بستر اینترنت مشکلی وجود دارد: سرور نمی داند شما چه کسی هستید چرا که HTTP نمی تواند وضعیت را همیشه فعال نگه دارد؛ شما هنگام خاموش کردن مودم از اینترنت جدا می شوید!

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

session ها با استفاده از تابع ()session_start در PHP شروع شده و در SESSION_$ ذخیره می شوند. برای کار با session ها صفحه ی جدیدی به نام demo_session1.php می سازیم تا در آن چند session ایجاد کنیم:

مشاهده ی خروجی

تابع ()session_start باید اولین چیز در سند شما باشد، قبل از هر تگ HTML دیگری!

حالا یک صفحه ی دیگر به نام demo_session2.php می سازیم تا به Session ها دسترسی داشته باشیم. حتما شما هم متوجه شده اید که Session ها به طور جداگانه و تک تک به صفحات ارسال نمی شوند بلکه از همان نشست اولیه (()session_start) دریافت می شوند. همچنین باید بدانید که تمام session ها در متغیر سراسری SESSION_$ ذخیره می شوند.

مشاهده ی خروجی

یک راه دیگر برای نمایش session ها به کاربر استفاده از کد زیر است:

مشاهده ی خروجی

نحوه ی کار session ها بدین شکل است که یک کلید خصوصی در کامپیوتر کاربر ایجاد می کنند که شبیه این کلید است: 765487cf34ert8dede5a562e4f3a7e12. سپس زمانی که یک Session در صفحه ی دیگری باز می شود به دنبال این کلید میگردد. اگر چیزی پیدا کرد به آن session دسترسی پیدا می کند و در غیر این صورت یک session جدید می سازد.

ویرایش یا حذف session ها

مانند کوکی ها برای ویرایش یک Session باید آن را overwrite کنید:

مشاهده ی خروجی

برای حذف session ها نیز می توانید از تابع ()session_unset یا ()session_destroy استفاده کنید:

مشاهده ی خروجی

امیدوارم از این قسمت لذت برده باشید.

ترتیبی که روکسو برای یادگیری مطالب سری آموزش PHP 7 به شما توصیه می‌کند:
2 نظر
  1. بهداد
    0

    سلام ممنونم از مقاله ی خوبتون
    من چند تا سوال داشتم:

    ۱- آیا session ها با بستن کل مرورگر از بین میرن یا با بستن تب ها هم نابود میشن؟
    ۲- session توی فارسی ترجمه شده؟ چی میشه؟
    ۳- کوکی ها رو میشه برای تم دادن و شخصی سازی هم استفاده کرد؟

    1. امیر زوارمی
      0

      سلام دوست عزیز

      session ها با بستن کل مرورگر بسته میشن (البته راه هایی هست که session ها رو سمت سرور ذخیره هم کرد که وارد مباحث دیگه ای میشه)

      توی فارسی معمولا session رو به معنی «نشست» در نظر میگیرن. بهتره از همون Session استفاده کنید.

      برای کوکی ها هم بله میشه برای تم دادن به سایت استفاده کرد. مثلا مقدار خاصی رو برای هر تم در نظر بگیرین و بگین اگه فلان مقدار رو در کوکی کاربر داشتیم فلان تم نمایش داده بشه.

ارسال نظر

توجه:‌ آدرس ایمیل شما منتشر نخواهد شد.

film izle | eskisehir escort | modanisa | mersin escort | www.ieski.com | eskort adana | www.izmir-eskort.org | kabak koyu | hd tv izle