در برنامهنویسی وب بسیار پیش میآید که نیاز به ذخیره اطلاعات در متغیرهایی داشته باشیم که در سراسر پروژه در دسترس باشند. در این شرایط میتوان از Session ها و Cookie ها استفاده کرد.
پروتکل HTTP پروتکلی Stateless است به این معنی که اطلاعاتی از درخواست کننده را نزد سرور نگهداری نمی کند. بنابر این در درخواست های بعدی، امکان شناسایی طرفین درخواست وجود ندارد. با استفاده از cookie می توان برای شناسایی کاربران اطلاعات server را نزد client قرار داد.
کوکی ها (Cookie) ها فایل های متنی هستند که توسط مرورگر Client در مرورگر وی و به صورت محلی (local) برای شناسایی کاربر ذخیره می شوند. کوکی ها طول عمر دارند و بنا به خواست توسعه دهنده تنظیم می شوند. کوکی های متعلق به یک دامنه، در اولین درخواست بین Client و Server رد وبدل می شنود تا در درخواست های بعدی امکان شناسایی وجود داشته باشد. از آنجا که کوکی ها با جا به جا شدن از یک صفحه به صفحه دیگر و یا حتی بسته شدن مرورگر از بین نمی روند، می توان از آنها برای ذخیره توکن کابر، ذخیره تنظیمات کاربر مانند اندازه فونت و رنگ اجزای صفحه، نام کاربری و … استفاده کرد.
نکته مهم درباره کوکی ها این است که کوکی ها در دسترس هستند و دستکاری یا سرقت آن ها کاری دشوار نیست، بنا بر این نباید قابل خواندن و حاوی اطلاعات مهم باشند.
یک کوکی از بخش های زیر تشکیل شده است:
تاریخ انقضا (Expire):
تاریخ انقضا یا طول عمر کوکی.
محتوا (Content):
محتوای ذخیره شده در کوکی.
دامنه (Domain):
دامنه ای که کوکی در آن ایجاد می شود.
مسیر (Path):
مسیری که کوکی در آن ذخیره می شود.
امنیت (Secure):
اطلاعات امنیتی مربوط به سرویس دهنده های امن.
کوکی های session:
برای مواقعی که نیاز است یک کوکی به طور موقت استفاده شود از آنها استفاده میکنیم زیرا آنها در حافظه موقت ذخیره می شوند و تا زمانی که مرورگر کاربر بسته شود باقی می مانند.
کوکی های امن یا secure:
این کوکی ها رمزگذاری شده است و فقط در یک اتصال امن HTTPS کار می کند. برای نگهداری اطلاعات حساس از این نوع کوکی استفاده می شود. به دلیل اینکه این نوع کوکی رمزنگاری شده هستند از سایر انواع خود امن تر هستند.
کوکی های پایدار یا Persistent:
از آن ها برای ردیابی و جمع آوری اطلاعات کاربر در طول یک بازه زمانی خاص استفاده می کنند.
کوکی های HttpOnly :
این کوکی ها فقط توسط دامنه ای که آنها را ایجاد کرده اند می توانند مورد استفاده قرار بگیرند، همچنین نمی توانند توسط هیچ پروتکلی غیر از HTTP استفاده شوند. فقط کوکی های session می توانند HttpOnly باشند.
کوکی های شخص ثالث یا Third-Party:
این کوکی ها متعلق به یک دامنه متفاوت، غیر از دامنه ای که آنها را ایجاد کرده است می باشند و می توانند تاریخچه مرور یک کاربر را در چندین وبسایت که از یک شبکه تبلیغاتی استفاده می کنند، ذخیره کنند. از آنجا که این کوکی ها در شبکه های تبلیغاتی برای تبلیغات هوشمند برای ردیابی اطلاعات استفاده می شود ممکن است به حریم خصوصی آسیب برساند.
کوکی های زامبی:
این نوع کوکی ها در خارج از مرورگر ذخیره می شوند و پس از حذف شدن، خود را بازیابی می کنند. آنها معمولا توسط سرویس های تجزیه و تحلیل و به این دلیل که اگر کاربر کوکی ها را حذف کرد، داده ها از بین نروند مورد استفاده قرار می گیرند. آنها همچنین می توانند برای اهداف مخرب مورد استفاده قرار بگیرند، زیرا مرورگر نمی تواند وجود آن ها را کنترل کند. تنها محصولات امنیتی مثل آنتی ویروس ها هستند که می توانند کوکی های زامبی را شناسایی و حذف کنند.
سشن (Session) برخلاف کوکی ها در سرویس دهنده (Server) ذخیره می شود. مکان ذخیره Session را میتوان تغییر داد ولی به صورت پیشفرض در حافظه ذخیره می شود، به همین دلیل به سرعت قابل دسترسی هستند. به این دلیل که مقادیر Session عمومی نیست باید به ازای هر کاربر ایجاد گردد. بنابراین باید در هنگام ساخت یک Session، یک کوکی هم در سرویس گیرنده با مقدار آیدی Session ایجاد گردد.
به طور پیش فرض، Session ها بعد از بسته شدن مرورگر، از بین خواخند رفت بنابر این در صورتی که اطلاعات حساس در آن ها قرار می گیرد باید مقدار آن ها در پایگاه داده ذخیره شوند.
از sessionها باید فقط برای اطلاعات مهم استفاده کرد زیرا استفاده بیش از حد از آن ها می تواند موجب کاهش سرعت بارگذاری صفحات شود.
مراحل ایجاد یک session:
به صورت کلی تفاوت session و cookie در یک نگاه :
سشن ها (Sessions)
1) اطلاعات را روی سرور برای کاربر ذخیره می کنند (Server-Side)
2) محدودیت در حجم و نوع داده ندارند
3) برای نگهداری موقتی اطلاعات هستند (Temporarily)
4) از امنیت بالاتری برخوردار هستند
5) اطلاعات سشن های کدگذاری شده فقط در خود سرور می تواند تفسیر و بازگشایی شود (Decrypt on Server)
6)با اتمام کار کاربر با وب-اپلیکشن یا بستن مرورگر سشن ها از بین می روند
کوکی ها (Cookies)
1)اطلاعات را روی مرورگر برای کاربر ذخیره می کنند
2) فقط میتوانند نوع string را با حجم حداکثری 4 کیلوبایت ذخیره سازی کنند
3) از امنیت پایین تری نسبت به سشن ها برخوردار هستند
4)حتا با بسته شدن برنامه یا مرورگر، کوکی ها بسته به زمان تعیین شده (Life-time) در مرورگر باقی می مانند
5) پذیرفتن کوکی امری اجباری نیست و کاربر به راحتی می تواند کوکی هارا از سمت یک سایت قبول نکند یا حذف کند
6)برای ستفاده از کوکی ها در سمت سرور (Back-End) نیازی به استفاده از تابع خاصی (در زبان PHP) نداریم