سی ام اس نویسسی ام اس نویسیاد بگیر، سیستم خودتو بنویس
مجلهتماس با ما
سی ام اس نویسسی ام اس نویس

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

پیوندهای سریع
محصولات فیزیکیمحصولات دیجیتالدوره‌های آموزشی
سی ام اس نویس
مجله سی ام اس نویستماس با ماپنل کاربری
سی ام اس نویس — تمامی حقوق برای سی ام اس نویس محفوظ است. © 1406 تماس با ما09307711941
Cookie در Laravel چیست؟ آموزش کامل Cookie در لاراول

Cookie در Laravel چیست؟ آموزش کامل Cookie در لاراول

ممدیر کل سیستم ۱۰ مهر ۱۴۰۵ ۱۹ دقیقه مطالعه ۱ بازدید
Cookie در Laravel چیست؟ آموزش کامل Cookie در لاراول

وقتی یک کاربر وارد یک وب‌سایت می‌شود، مرورگر می‌تواند اطلاعات کوچکی را برای استفاده در درخواست‌های بعدی نگهداری کند. این اطلاعات معمولاً با مکانیزمی به نام Cookie مدیریت می‌شوند.

Cookie یکی از مفاهیم پایه در توسعه وب است و در بسیاری از قابلیت‌های سایت‌ها مانند نگهداری تنظیمات کاربر، شناسایی نشست، ذخیره برخی ترجیحات و مدیریت وضعیت مرورگر استفاده می‌شود.

Laravel نیز API ساده و قدرتمندی برای کار با Cookie در اختیار توسعه‌دهنده قرار می‌دهد.

در این مقاله یاد می‌گیریم:

  • Cookie چیست؟
  • Cookie چگونه کار می‌کند؟
  • چگونه در Laravel یک Cookie بسازیم؟
  • چگونه Cookie را بخوانیم؟
  • چگونه Cookie را حذف کنیم؟
  • چگونه مدت اعتبار Cookie را مشخص کنیم؟
  • تفاوت Cookie و Session چیست؟
  • Cookie در Request و Response چه نقشی دارد؟
  • Cookie Facade و Helper چیست؟
  • تنظیمات امنیتی Cookie چه هستند؟
  • HttpOnly، Secure و SameSite چه مفهومی دارند؟
  • چه اطلاعاتی را نباید داخل Cookie قرار دهیم؟
  • چگونه از Cookie در پروژه واقعی Laravel استفاده کنیم؟

# Cookie چیست؟

Cookie یک قطعه اطلاعات کوچک است که توسط وب‌سایت برای مرورگر ارسال می‌شود و مرورگر می‌تواند آن را برای درخواست‌های بعدی نگهداری کند.

برای مثال تصور کنید کاربر زبان سایت را روی فارسی تنظیم کرده است.

سایت می‌تواند این ترجیح را در Cookie ذخیره کند:


language = fa

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

به زبان ساده:


Server

   ↓

Set-Cookie

   ↓

Browser

   ↓

Cookie Storage

   ↓

Request بعدی

   ↓

Cookie

   ↓

Server


# چرا Cookie در وب مهم است؟

پروتکل HTTP به‌صورت Stateless طراحی شده است.

یعنی هر Request به‌صورت مستقل پردازش می‌شود و سرور به‌صورت خودکار تمام اطلاعات درخواست‌های قبلی را در اختیار ندارد.

Cookie یکی از مکانیزم‌هایی است که به مرورگر و سرور اجازه می‌دهد برخی اطلاعات را بین درخواست‌های مختلف منتقل کنند.

برای مثال:


Request 1

↓

Server sets Cookie

↓

Browser stores Cookie

↓

Request 2

↓

Browser sends Cookie

↓

Server reads Cookie

به همین دلیل Cookie در بسیاری از سیستم‌های وب کاربرد دارد.


# Cookie در Laravel چگونه کار می‌کند؟

در Laravel، Cookie معمولاً در قالب بخشی از HTTP Response ساخته می‌شود.

برای مثال:


return response('Hello')

    ->cookie('language', 'fa');

Laravel یک Response ایجاد می‌کند و Cookie را به Headerهای آن اضافه می‌کند.

مرورگر بعد از دریافت Response، Cookie را ذخیره می‌کند.

در درخواست‌های بعدی، مرورگر در صورت برقرار بودن شرایط Cookie، آن را برای دامنه مربوطه ارسال می‌کند.


# ساخت Cookie در Laravel

یکی از ساده‌ترین روش‌ها استفاده از متد cookie() روی Response است.

مثلاً:


return response('Cookie created')

    ->cookie('username', 'Saeed');

در این مثال:


نام Cookie: username

مقدار: Saeed

خواهد بود.


# تعیین مدت اعتبار Cookie

معمولاً هنگام ساخت Cookie باید مشخص کنیم که Cookie چه مدت اعتبار داشته باشد.

مثلاً:


return response('Cookie created')

    ->cookie('username', 'Saeed', 60);

در اینجا عدد 60 مدت اعتبار Cookie بر حسب دقیقه است.

بنابراین Cookie برای مدت مشخصی معتبر خواهد بود.


# ساخت Cookie با Cookie Facade

Laravel امکان استفاده از Cookie Facade را نیز در اختیار ما قرار می‌دهد.

برای مثال:


use Illuminate\Support\Facades\Cookie;

سپس:


$cookie = Cookie::make(

    'username',

    'Saeed',

    60

);

در نهایت می‌توان Cookie را به Response اضافه کرد:


return response('Cookie created')

    ->withCookie($cookie);


# تفاوت Cookie::make و response()->cookie

دو روش رایج برای ساخت Cookie عبارت‌اند از:


Cookie::make(...)

و:


response()->cookie(...)

هر دو می‌توانند برای ساخت Cookie استفاده شوند.

روش اول زمانی مفید است که بخواهید Cookie را به‌صورت مستقل بسازید و بعداً آن را به Response اضافه کنید.

روش دوم برای موارد ساده‌تر بسیار خوانا است:


return response('OK')

    ->cookie('theme', 'dark', 60);


# خواندن Cookie در Laravel

برای خواندن Cookie موجود در Request می‌توان از متد cookie() روی Request استفاده کرد.

مثلاً:


$value = $request->cookie('username');

اگر Cookie وجود داشته باشد، مقدار آن دریافت می‌شود.


# مثال کامل خواندن Cookie

در Controller:


use Illuminate\Http\Request;



public function index(Request $request)

{

    $username = $request->cookie('username');



    return $username;

}

در این مثال Laravel Cookie موجود در Request را دریافت می‌کند.


# دریافت Cookie از Request

یک روش دیگر این است که Request را بررسی کنیم:


$value = request()->cookie('username');

این روش در مواقعی که به شیء Request دسترسی مستقیم نداریم می‌تواند مفید باشد.


# تعیین مقدار پیش‌فرض برای Cookie

در برخی سناریوها ممکن است Cookie وجود نداشته باشد.

بنابراین بهتر است در منطق برنامه این حالت را نیز در نظر بگیریم.

مثلاً:


$theme = $request->cookie('theme', 'light');

در این حالت اگر Cookie مربوط به theme وجود نداشته باشد، مقدار پیش‌فرض:


light

استفاده خواهد شد.


# حذف Cookie در Laravel

برای حذف Cookie می‌توان از متد forget() استفاده کرد.

مثلاً:


return response('Cookie removed')

    ->withCookie(

        Cookie::forget('username')

    );

در این حالت Laravel Cookie مربوط به username را برای حذف شدن علامت‌گذاری می‌کند و مرورگر در نتیجه Response آن را حذف خواهد کرد.


# حذف Cookie با Response

می‌توان این کار را در یک Response انجام داد:


return response('Logged out')

    ->withCookie(Cookie::forget('username'));

این الگو در سناریوهایی مانند Logout یا حذف تنظیمات کاربر کاربرد دارد.


# Cookie در Controller

یک مثال ساده از استفاده Cookie در Controller:


use Illuminate\Http\Request;



class PreferenceController

{

    public function setTheme()

    {

        return response('Theme saved')

            ->cookie('theme', 'dark', 60 * 24 * 30);

    }



    public function getTheme(Request $request)

    {

        return $request->cookie('theme', 'light');

    }

}

در این مثال:

  • Theme کاربر ذخیره می‌شود.
  • Cookie به مدت مشخصی معتبر است.
  • در درخواست بعدی Theme از Cookie خوانده می‌شود.
  • اگر Cookie وجود نداشته باشد، light استفاده می‌شود.

# استفاده از Cookie برای تنظیمات کاربر

یکی از کاربردهای مناسب Cookie، نگهداری ترجیحات ساده کاربر است.

مثلاً:


theme = dark

language = fa

currency = toman

یا:


sidebar = collapsed

البته اطلاعاتی که داخل Cookie ذخیره می‌کنید باید کوچک، غیرحساس و متناسب با نیاز برنامه باشد.


# Cookie و انتخاب زبان سایت

فرض کنید سایت شما چندزبانه است.

کاربر زبان فارسی را انتخاب می‌کند:


return response()

    ->redirectTo('/dashboard')

    ->cookie('locale', 'fa', 60 * 24 * 30);

در درخواست‌های بعدی:


$locale = $request->cookie('locale', 'fa');

اکنون برنامه می‌تواند بر اساس Cookie زبان مناسب را انتخاب کند.


# Cookie و Theme سایت

یک کاربرد دیگر، ذخیره Theme انتخاب‌شده توسط کاربر است.

مثلاً:


return response()

    ->cookie('theme', 'dark', 60 * 24 * 30);

سپس:


$theme = request()->cookie('theme', 'light');

و در Blade می‌توان بر اساس مقدار Theme رابط کاربری مناسب را نمایش داد.


# Cookie و Redirect

Cookie را می‌توان همراه Redirect نیز ارسال کرد.

مثلاً:


return redirect()

    ->route('dashboard')

    ->withCookie(

        cookie('theme', 'dark', 60 * 24 * 30)

    );

این الگو در پروژه‌های واقعی بسیار کاربردی است.

مثلاً کاربر تنظیمی را تغییر می‌دهد، سپس به صفحه دیگری منتقل می‌شود و Cookie نیز همراه Redirect تنظیم می‌شود.


# Cookie و Response

مفهوم مهمی که باید درک کنید این است که Cookie معمولاً بخشی از Response است.

مثلاً:


return response('OK')

    ->cookie('name', 'Saeed', 60);

در اینجا Cookie همراه Response از Laravel به مرورگر ارسال می‌شود.

به‌صورت مفهومی:


Laravel

   |

   | HTTP Response

   | Set-Cookie

   ↓

Browser


# Cookie و Request چه تفاوتی دارند؟

هنگام ایجاد Cookie:


Response

اهمیت دارد.

هنگام دریافت Cookie:


Request

اهمیت دارد.

یعنی:


Server → Browser

Response + Set-Cookie



Browser → Server

Request + Cookie

این تفاوت برای درک نحوه کار Cookie بسیار مهم است.


# تفاوت Cookie و Session

Session و Cookie بسیار به یکدیگر مرتبط هستند اما یکی نیستند.

ویژگیCookieSession
محل نگهداریمرورگربسته به Driver
ارسال به سرورمعمولاً همراه Requestبر اساس سازوکار Session
مناسب برای تنظیمات سادهبلهبله
مناسب برای داده حساسبا ملاحظات جدیبا طراحی مناسب
حجممحدودوابسته به Storage
مدیریت وضعیت کاربرمی‌تواند نقش داشته باشدکاربرد بسیار مهم
وابستگی به Browserزیادبخشی از مکانیزم آن با Cookie مرتبط است

به‌صورت ساده:

Cookie معمولاً در سمت مرورگر نگهداری می‌شود، در حالی که Session یک سازوکار مدیریت وضعیت است که محل ذخیره آن به Driver انتخاب‌شده بستگی دارد.


# آیا Session بدون Cookie کار می‌کند؟

باید بین مفهوم Session و Session Identifier تفاوت قائل شویم.

در بسیاری از سیستم‌های Web، مرورگر یک شناسه مرتبط با Session را از طریق Cookie نگهداری می‌کند.

به این ترتیب:


Browser

   ↓

Session Cookie

   ↓

Session ID

   ↓

Server-side Session Storage

در چنین معماری‌ای Cookie لزوماً محل نگهداری تمام اطلاعات Session نیست؛ بلکه می‌تواند شناسه‌ای را نگهداری کند که Laravel با استفاده از آن Session مربوطه را پیدا می‌کند.

این نکته یکی از مهم‌ترین تفاوت‌های مفهومی Cookie و Session است.


# Cookieهای مهم در Authentication

در سیستم‌های Authentication مبتنی بر Session، Cookie می‌تواند نقش مهمی در حفظ وضعیت کاربر داشته باشد.

به‌صورت ساده:


Login

 ↓

Authentication

 ↓

Session

 ↓

Session Identifier

 ↓

Cookie

 ↓

Browser

در درخواست بعدی مرورگر Cookie مرتبط را ارسال می‌کند و برنامه می‌تواند Session مربوط به کاربر را پیدا کند.

بنابراین درک Cookie برای درک Authentication در Laravel نیز اهمیت دارد.


# HttpOnly Cookie چیست؟

یکی از ویژگی‌های مهم Cookie، HttpOnly است.

وقتی Cookie با ویژگی HttpOnly تنظیم شود، JavaScript سمت مرورگر نمی‌تواند مستقیماً آن Cookie را از طریق APIهای معمول Cookie مانند document.cookie بخواند.

این ویژگی می‌تواند ریسک دسترسی اسکریپت‌های مخرب به Cookie را کاهش دهد.

اما باید توجه داشت:

HttpOnly به‌تنهایی امنیت کامل Cookie را تضمین نمی‌کند.

امنیت Cookie به مجموعه‌ای از تنظیمات و معماری امنیتی برنامه وابسته است.


# Secure Cookie چیست؟

ویژگی Secure باعث می‌شود Cookie فقط از طریق اتصال امن HTTPS ارسال شود.

به‌صورت مفهومی:


Secure Cookie

       ↓

HTTPS

       ↓

Browser ↔ Server

در سایت‌های Production که HTTPS فعال است، استفاده صحیح از Secure Cookie یکی از ملاحظات مهم امنیتی است.


# SameSite Cookie چیست؟

ویژگی SameSite مشخص می‌کند مرورگر Cookie را در چه شرایطی و در ارتباط با درخواست‌های Cross-Site ارسال کند.

مقادیر رایج آن عبارت‌اند از:


Strict

Lax

None

انتخاب مقدار مناسب به معماری سایت و نحوه تعامل آن با دامنه‌های دیگر بستگی دارد.

برای مثال اگر سایت شما با سرویس‌های خارجی، دامنه‌های متفاوت یا سیستم‌های احراز هویت خاص کار می‌کند، تنظیم SameSite اهمیت بیشتری پیدا می‌کند.


# چرا تنظیمات SameSite مهم است؟

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

اگر Cookie به‌درستی تنظیم نشده باشد، ممکن است در بعضی درخواست‌ها مرورگر Cookie را ارسال نکند.

این موضوع می‌تواند باعث مشکلاتی مانند:

  • خارج شدن کاربر از حساب
  • کار نکردن بعضی درخواست‌ها
  • مشکل در Authentication
  • مشکل در سیستم‌های Cross-Site

شود.

بنابراین هنگام طراحی Authentication یا سیستم‌های چنددامنه‌ای، Cookie Policy مرورگر باید در نظر گرفته شود.


# Cookie Encryption در Laravel

Laravel برای Cookieهای معمولی خود مکانیزم‌هایی برای محافظت از داده Cookie در اختیار برنامه قرار می‌دهد.

در پروژه‌های Laravel، نباید تصور کنید Cookie صرفاً یک رشته ساده است که بدون هیچ پردازشی به مرورگر ارسال می‌شود.

Laravel می‌تواند Cookieها را از طریق Middleware مربوط به Cookie پردازش کند.

با این حال:

نباید صرفاً به دلیل وجود رمزنگاری، هر نوع اطلاعات محرمانه‌ای را داخل Cookie ذخیره کنید.

داده‌ای که اصلاً نباید در سمت کاربر باشد، بهتر است از ابتدا در سمت سرور نگهداری شود.


# چه اطلاعاتی را نباید داخل Cookie ذخیره کنیم؟

Cookie برای اطلاعات کوچک و مناسب سمت Client طراحی شده است.

بنابراین از ذخیره موارد زیر در Cookie خودداری کنید:


Password

Private Key

اطلاعات بانکی حساس

اطلاعات بسیار محرمانه

داده‌های حجیم

اطلاعاتی که تغییرات بسیار زیادی دارند

برای مثال به جای:


cookie('user_data', $largeUserObject);

بهتر است داده اصلی در Database باشد و در صورت نیاز فقط یک مقدار کوچک و غیرحساس یا شناسه مناسب نگهداری شود.


# محدودیت حجم Cookie

Cookie برای ذخیره اطلاعات حجیم طراحی نشده است.

مرورگرها برای Cookie محدودیت‌هایی در اندازه دارند و علاوه بر آن، Cookie در بسیاری از درخواست‌های مربوط به دامنه همراه Request ارسال می‌شود.

بنابراین اگر Cookieهای بزرگی ایجاد کنید، ممکن است حجم اضافی به درخواست‌های HTTP تحمیل شود.

به همین دلیل:

Cookie را کوچک نگه دارید.


# Cookie و Performance

فرض کنید سایت شما Cookie بسیار بزرگی دارد.

اگر این Cookie در درخواست‌های متعدد ارسال شود، بخشی از حجم HTTP Request را اشغال می‌کند.

در سایت‌هایی با تعداد درخواست زیاد، این موضوع می‌تواند به سربار غیرضروری تبدیل شود.

پس اطلاعاتی مانند:


theme

locale

small preference

برای Cookie منطقی‌تر از داده‌های حجیم هستند.


# Cookie در Laravel Middleware

Laravel برای پردازش Cookie از Middlewareهای مرتبط با Cookie استفاده می‌کند.

در چرخه درخواست، Cookie می‌تواند:


Request

 ↓

Middleware

 ↓

Controller

 ↓

Response

 ↓

Cookie

پردازش شود.

این موضوع به شما اجازه می‌دهد Cookie را به شکل استاندارد در چرخه Request/Response Laravel مدیریت کنید.


# مثال عملی؛ ذخیره حالت Dark Mode

فرض کنید در سایت یک دکمه برای تغییر Dark Mode داریم.

وقتی کاربر حالت تاریک را انتخاب می‌کند:


public function darkMode()

{

    return redirect()

        ->back()

        ->withCookie(

            cookie('theme', 'dark', 60 * 24 * 30)

        );

}

سپس در بخش دیگری از برنامه:


$theme = request()->cookie('theme', 'light');

اگر Cookie وجود داشته باشد:


dark

و اگر وجود نداشته باشد:


light

دریافت می‌شود.


# مثال عملی؛ حذف تنظیم Theme

اگر کاربر بخواهد تنظیم Theme را حذف کند:


use Illuminate\Support\Facades\Cookie;



public function resetTheme()

{

    return redirect()

        ->back()

        ->withCookie(

            Cookie::forget('theme')

        );

}

اکنون Cookie مربوط به Theme حذف خواهد شد.


# مثال عملی؛ Cookie برای زبان سایت

یک Controller ساده:


use Illuminate\Http\Request;



class LanguageController

{

    public function set(Request $request, string $locale)

    {

        return redirect()

            ->back()

            ->withCookie(

                cookie('locale', $locale, 60 * 24 * 30)

            );

    }



    public function current(Request $request)

    {

        return $request->cookie('locale', 'fa');

    }

}

در اینجا:


locale = fa

می‌تواند به‌عنوان زبان پیش‌فرض ذخیره شود.


# Cookie و چند دامنه

در پروژه‌هایی که چند Subdomain یا Domain دارند، تنظیمات Cookie اهمیت بیشتری پیدا می‌کند.

مثلاً:


portal.example.com

app.example.com

api.example.com

اگر بخواهید Cookie بین بعضی Subdomainها استفاده شود، Domain Cookie باید به‌درستی تنظیم شود.

این موضوع در پروژه‌هایی که چند Application یا چند Subdomain دارند بسیار مهم است.


# Cookie در پروژه‌های چندسروره

Cookie در سمت Browser نگهداری می‌شود، بنابراین برخلاف File Session، یک Cookie معمولی به Storage محلی یک Application Server وابسته نیست.

مثلاً:


              Load Balancer

                    |

          ---------------------

          |                   |

      Server 1            Server 2

          |                   |

          ------ Browser ------

Browser Cookie را نگهداری می‌کند و آن را در درخواست‌های مناسب ارسال می‌کند.

اما اگر Cookie حاوی شناسه Session باشد، خود Session همچنان باید در Storage مناسب و قابل دسترس برای سرورهای مختلف قرار داشته باشد.

این تفاوت در معماری‌های چندسروره بسیار مهم است.


# Cookie و CSRF

Cookie در سیستم‌های Web می‌تواند با موضوع CSRF نیز ارتباط داشته باشد.

در برنامه‌هایی که Authentication مبتنی بر Cookie دارند، باید مکانیزم‌های محافظت در برابر CSRF به‌درستی پیاده‌سازی شوند.

Laravel ابزارهای داخلی برای مدیریت CSRF در اختیار توسعه‌دهنده قرار می‌دهد.

به همین دلیل نباید صرفاً به وجود Cookie برای امنیت درخواست‌ها اکتفا کرد.


# Cookie و XSS

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

به همین دلیل ویژگی‌هایی مانند:


HttpOnly

Secure

SameSite

و همچنین جلوگیری از XSS اهمیت زیادی دارند.

امنیت Cookie فقط یک تنظیم نیست؛ بلکه بخشی از امنیت کلی Application است.


# بهترین روش‌ها برای استفاده از Cookie در Laravel

برای استفاده صحیح از Cookie در پروژه‌های Laravel این نکات را در نظر بگیرید:

۱. Cookie را کوچک نگه دارید

اطلاعات غیرضروری داخل Cookie قرار ندهید.

۲. اطلاعات حساس را سمت Client ذخیره نکنید

اگر داده‌ای واقعاً محرمانه است، ابتدا بررسی کنید آیا اصلاً باید در Browser قرار بگیرد یا خیر.

۳. HTTPS را در Production فعال کنید

Cookieهای حساس باید با سیاست امنیتی مناسب و اتصال HTTPS استفاده شوند.

۴. HttpOnly را برای Cookieهای مناسب فعال نگه دارید

این کار می‌تواند دسترسی JavaScript به Cookie را محدود کند.

۵. SameSite را متناسب با معماری انتخاب کنید

به‌خصوص در سیستم‌های Authentication و Cross-Site.

۶. به Domain و Path توجه کنید

Cookie باید برای محدوده‌ای که واقعاً به آن نیاز دارید تنظیم شود.

۷. Cookie را جایگزین Database نکنید

Cookie برای داده‌های کوچک سمت Client است، نه نگهداری دیتای اصلی Application.


# تفاوت Cookie، Session و Cache

این سه مفهوم گاهی با یکدیگر اشتباه گرفته می‌شوند.

ویژگیCookieSessionCache
هدف اصلینگهداری اطلاعات سمت Clientحفظ وضعیت کاربر بین درخواست‌هانگهداری موقت داده برای افزایش سرعت
محل ذخیرهBrowserوابسته به Driverوابسته به Cache Driver
مناسب برای تنظیمات کاربربلهبلهمعمولاً نه
مناسب برای Authenticationمی‌تواند بخشی از آن باشدبسیار رایجخیر
هدف اصلی Performanceخیرخیربله
قابل ارسال همراه Requestبلهمعمولاً با سازوکار Session Cookieخیر

در نتیجه نباید این سه مفهوم را جایگزین یکدیگر در نظر گرفت.


# چه زمانی از Cookie استفاده کنیم؟

Cookie انتخاب مناسبی است وقتی که:

  • داده کوچک است.
  • داده برای Browser کاربرد دارد.
  • اطلاعات حساس نیست یا به شکل مناسب محافظت می‌شود.
  • لازم است در درخواست‌های بعدی قابل دسترس باشد.
  • داده مربوط به ترجیحات کاربر است.

مثلاً:


theme

locale

small preferences


# چه زمانی از Session استفاده کنیم؟

Session زمانی مناسب‌تر است که:

  • اطلاعات مربوط به وضعیت نشست کاربر است.
  • داده نباید مستقیماً در Client نگهداری شود.
  • برنامه نیاز به حفظ وضعیت بین درخواست‌ها دارد.
  • اطلاعات موقت کاربر باید سمت Server مدیریت شود.

مثلاً:


cart identifier

authentication state

flash messages

temporary workflow state


# چه زمانی از Database استفاده کنیم؟

اگر اطلاعات:

  • دائمی است،
  • حجیم است،
  • بخش اصلی Business Logic است،
  • نیاز به Query دارد،
  • باید رابطه داشته باشد،

بهتر است در Database ذخیره شود.

مثلاً اطلاعات:


User

Product

Order

Invoice

Payment

Article

نباید صرفاً در Cookie یا Session نگهداری شوند.


# جمع‌بندی

Cookie در Laravel یکی از مفاهیم مهم برای توسعه برنامه‌های Web است.

Laravel ابزارهای مختلفی برای ایجاد، خواندن و حذف Cookie در اختیار توسعه‌دهنده قرار می‌دهد.

برای ایجاد Cookie می‌توان از:


response()->cookie()

یا:


Cookie::make()

استفاده کرد.

برای خواندن Cookie:


$request->cookie('name');

و برای حذف آن:


Cookie::forget('name');

از طرف دیگر، Cookie با Session ارتباط نزدیکی دارد، اما این دو مفهوم یکسان نیستند.

Cookie معمولاً در Browser نگهداری می‌شود، در حالی که Session می‌تواند بر اساس Driver انتخاب‌شده در File، Database، Redis یا Storageهای دیگر مدیریت شود.

در پروژه‌های واقعی، مهم‌ترین اصل این است که Cookie را کوچک نگه دارید، اطلاعات حساس را بدون دلیل در Client قرار ندهید و تنظیمات امنیتی مانند:


HttpOnly

Secure

SameSite

را متناسب با معماری برنامه در نظر بگیرید.


# سوالات متداول درباره Cookie در Laravel

Cookie در Laravel چیست؟

Cookie اطلاعات کوچکی است که می‌تواند توسط Server برای Browser ارسال شود و Browser آن را برای درخواست‌های بعدی نگهداری کند.

چگونه در Laravel Cookie ایجاد کنیم؟

مثلاً:


return response('OK')

    ->cookie('theme', 'dark', 60);

چگونه Cookie را در Laravel بخوانیم؟

از Request:


$theme = $request->cookie('theme');

چگونه Cookie را حذف کنیم؟

با Cookie::forget():


return response('OK')

    ->withCookie(

        Cookie::forget('theme')

    );

آیا Cookie و Session یکی هستند؟

خیر. Cookie معمولاً در Browser ذخیره می‌شود، اما Session یک مکانیزم مدیریت وضعیت است که Storage آن می‌تواند متفاوت باشد.

آیا می‌توان Password را داخل Cookie ذخیره کرد؟

خیر. ذخیره Password یا سایر اطلاعات بسیار حساس در Cookie روش مناسبی نیست.

HttpOnly چیست؟

HttpOnly قابلیتی است که دسترسی JavaScript سمت Browser به Cookie را محدود می‌کند و می‌تواند بخشی از سیاست امنیتی Cookie باشد.

Secure Cookie چیست؟

Cookie با ویژگی Secure باید از طریق اتصال امن HTTPS ارسال شود.

SameSite چیست؟

SameSite سیاستی برای کنترل ارسال Cookie در شرایط Cross-Site است و مقادیر رایج آن شامل Strict، Lax و None هستند.

نظرات (0)

نظرات پس از تأیید مدیر نمایش داده می‌شوند

هنوز نظری ثبت نشده است؛ اولین نفر باشید!

مقالات مرتبط

ساخت CMS با Laravel 12؛ آموزش ساخت سیستم مدیریت محتوا از صفر

ساخت CMS با Laravel 12؛ آموزش ساخت سیستم مدیریت محتوا از صفر

۲۴ دقیقه
ساخت فروشگاه اینترنتی با Laravel 12؛ آموزش پروژه‌محور از صفر تا طراحی هسته فروشگاه

ساخت فروشگاه اینترنتی با Laravel 12؛ آموزش پروژه‌محور از صفر تا طراحی هسته فروشگاه

۲۲ دقیقه
ساخت Marketplace با Laravel؛ آموزش طراحی فروشگاه چندفروشندگی

ساخت Marketplace با Laravel؛ آموزش طراحی فروشگاه چندفروشندگی

۲۲ دقیقه
مدیریت Queueهای سنگین در Laravel؛ آموزش پردازش کارهای طولانی

مدیریت Queueهای سنگین در Laravel؛ آموزش پردازش کارهای طولانی

۲۲ دقیقه