PDA

View Full Version : Session و Cookie چیست؟



rezakho
سه شنبه 13 آبان 1393, 00:40 صبح
بارها توی تاپیک های مختلف دو مفهوم سشن و کوکی با هم اشتباه شده، لذا بد نیست یک مروری مختصر و مفید روی این دو باشه

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

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

با توجه به مطالب بالا، نکات زیر رو به خاطر داشته باشید

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

عمل خروج، چیزی نیست مگر پایان دادن به عمر کوکی که هنگام ورود ثبت شده.

دقت داشته باشید وقتی کوکی که نام سشن رو حمل میکنه پاک بشه، مدیریت کننده سشن در سمت سرور قادر به بارگذاری سشن نیست و اصطلاحا سشن هم از بین رفته!

با سرقت کوکی تایید کننده ورود، هکر میتونه خودش رو به جای شما جا بزنه که یکی از متداول ترین حملات هست، فراموش نکنید، سرقت کوکی حامل نام سشن، همون سرقت سشن هست.

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