بسم الله الرحمن الرحیم
امروز میخوام در مورد کوکی ها و سشن ها و تفاوت بین این دو کمی صحبت کنم امیدوارم که مفید واقع بشه برای دوستان عزیز.
پیرو سوالی که یکی از دوستان در یکی از تاپیکها کرد من این تاپیک رو با جواب دادن به سوال ایشون پیش میبرم .
سوال:
درسته . البته فرق های دیگه ای هم بین سشن و کوکی هست مثل :
- کوکی ها بصورت رشته ذخیره میشن
- چون بصورت رشته و متنی در طرف کاربر ذخیره میشن امنیت پایینی دارن ( یا بهتر باید بگم ندارن!- درسته که کوکی ها بصورت هش هم ذخیره میشن اما با سرقت همین کوکی ها میشه برای ورود به سایت و ... استفاده کرد )
- کوکی ها هم میتونن برای هر فرد جداگانه استفاده بشن و یا میتونن اینطور نباشن و تنظیمات کلی و یا یک سری اطلاعات اماری از سایت رو ذخیره کنن
- استفاده از کوکی ها باعث افزایش ترافیک شبکه میشه .
- اندازه اونها 40 بایته و تعداد کوکیهایی که میتونید استفاده کنید به 20 محدود شده
- ما میتونیم کوکی ها رو غیرفعال کنیم ( ما یعنی کلاینت )
- ما دو نوع کوکی داریم نوع پایدار و نوع ناپایدار
سشن :
- در سشن میتونید هر نوع داده ای رو ذخیره کنید
- سشن امن هست چرا که داده ها بصورت رمزنگاری شده /باینری ( و نه متنی و رشته ای ) در اون ذخیره میشن و در سمت سرور از حالت رمز خارج میشن
- سشن برای هر کاربر بصورت جداگانه و اختصاصی هست
- هیچ محدودیتی در تعداد سشن ها در برنامتون وجود نداره
- نکته منفی استفاده از سشن سرباری هست که به سرور تحمیل میکنه - برای همین در استفاده از اون باید جوانب کار رو رعایت کرد-
- سشنها به کوکیهای غیرپایدار هم معروف هستند چرا که زمان حیات اونها رو میشه بصورت دستی مشخص کرد .
کوکی:
بطور کل میشه گفت کوکیها داده های کوچکی از نظر اندازه هستند که بصورت رشته ای یا بصورت فایل بر روی سیستم کلاینت ذخیره میشن یا در حافظه سشن مرورگر کلاینت قرار میگیرن .
کوکی ها عموما برای ذخیره تنظیمات استفاده میشن . مثلا فرض کنید ما سایتی داریم که صفحه اول اون رو بر حسب اینکه یک کاربر داره اونو میبینه یا یک فرد ثبت نام نکرده سفارشیش میکنیم .
برای اینکه وقتی کسی به سایت ما وارد شد ما بفهمیم این کاربر ما هست یا نه و صفحه تغییر پیدا کرده رو بهش نشون بدیم یا نه ما میایم و کوکی رو روی سیستمش چک میکنیم .بصورت زیر:
if (Request.Cookies[“username”]!=null)
lbMessage.Text=Request.Cookies[“username”].Value+" عزیز " +"خوش آمدید!";
else
lbMessage.text="بازدید کننده محترم سلام!";
حالا اگه قرار باشه اطلاعات کلاینتمون رو ذخیره کنیم میتونیم این کار رو اینطور انجام بدیم :
Response.Cookies[“username’].Value=username;
با این کار دفعه بعدی که این کاربر به سایت ما سر میزنه ما میتونیم اون رو براحتی بشناسیم .
این هم چند مثال از استفاده از کوکی ها :
1در سایتهای فروشگاهی که شما میریدو کالاهای مختلف رو دید میزنید - میشه امار این بازدیدها رو در کوکیها ذخیره کرد که دفعه بعدی که میرید با نگاه کردن به کوکی ها لیست کالاهای مورد علاقه شما بهتون نمایش داده بشه ( مثلا آمازون این کارو میکنه + خیلی از سایتهای دیگه )
شما وقتی در سایتی ثبت نام کردین و یوزر پستون رو ذخیره کردید مرورگر شما - هر زمانی که شما دوباره وارد اون سایت شدید براحتی میتونه بر اساس اون کوکی ها عمل لاگین رو براتون انجام بده
بعضی از سایتها هستن که قبل از ورود از شما سن تون رو میپسن اگه فرد سن کم رو وارد کنید دیگه بهتون اجازه ورود نمیده - صفحه رو هم ببنید مرورگر رو هم ببنید و دوباره به همون سایت برید در بدو رورد با پیام خطا یا اخطاری مواجه میشید که میگه سن شما کمه - اینجا بار اولی که شما سنتون رو وارد کردید اون رو در کوکی ذخیره کرد و هر بار که شما سایت رو میبنید اول میره کوکی رو چک میکنه - اگر کوکی وجود نداشت سوال رو میپرسه و اگر داشت بر اساس مقداری که توش ذخیره شده تصمیم میگیره .
سشن :
در مورد سشن ها هم باید بگم سشن معمولا برای ذخیره اطلاعات مربوط به نشست بین کلاینت و سرور استفاده میشه اطلاعاتی که برای رفت و برگشتهای ممتد سرور و جواب به درخواستهای مختلف به اونها نیازه.
هر سشن مربوط به یک کلاینت هست و بنابراین برای هر کلاینت بطور جداگانه اختصاص پیدا میکنه . یک داده ایده آل برای ذخیره شدن در سشن خصیصه هایی مثل این هست : بزودی از بین بره ,داده حساسی باید باشه که منحصرا مربوط به یک نشست خاص بشه .
هر سشن فعال در ASP.NET توسط یک رشته آی دی 120 بیتی که ( که بهش SessionID گفته میشه و ) شامل کاراکترهای معتبر اسکی (از لحاظ معتبر بودن در URL ها ) هست تشخیص داده میشه و مورد استفاده قرار میگیره .
SessionID هایی که صحبتش رفت توسط یک الگوریتم خاص تولید میشن تا اول از یکتایی اونها اطمینان حاصل بشه و اینطور تداخل سشنها رو نداشته باشیم و از طرفی تصادفی بودن اونها تضمین بشه تا اینطور نشه براحتی اونها رو حدس زد ( و خرابکاری صورت داد) .
SessionID ها براساس تنظیماتی که شما روی وب کانفیگ برنامتون اعمال میکنید یا توسط کوکیها و یا توسط یک URL تغییر پیدا کرده بین درخواستهای بین کلاینت و سرور منتقل میشن
تمامی برنامه های تحت وب باید یک فایل تنظیمات یا بهتر بگم پیکربندی بنام web.config داشته باشن . این فایل یک فایل xml هست که احتمالا همتون دیدید . در این فایل یک بخشی وجود داره با نام sessionState که در اون میتونید تنظیمات مربوط به سشن رو در برنامتون لحاظ کنید .مقادیرش رو میتونید بعنوان مثال در زیر ببینید :
<sessionState
mode="SQLServer"
cookieless="true"
sqlConnectionString=" Integrated Security=SSPI;data source=MySqlServer;"
sqlCommandTimeout="10" />
برای اطلاعات بیشتر میتونید اینجا رو ببینید : sessionState Element (ASP.NET Settings Schema)
گزینه cookieless هم میتونه true و هم میتونه false باشه . اگه روی false - که گزینه پیشفرض هست- باشه ASP.net از کوکی برای تشخیص کاربرا استفاده میکنه . اگه true باشه ASP.net یک عدد یکتا رو بصورت تصادفی تولید میکنه و اون رو دقیقا جلوی فایل درخواست شده قرار میده .
این شماره برای شناسایی کاربر مورد استفاده قرار میگیره .
و در آخر هم برای کار برای ذخیره اطلاعات در سشن و بازیابی اون اینطور عمل میکنیم :
//ذخیره سازی
Session[“name”]=”Hossein”;
//بازیابی
name=Session[“name”];
اینجا رو هم مطالعه کنید خوبه
1- تفاوت زیادی ندارن به جز اینکه سشن توی سرور ذخیره میشه و کوکی در مرورگر کاربر. از نظر محدودیت حجم یا تعداد توابعی که برای کار با هر کدوم وجود داره تفاوتهایی وجود داره. به نظر من اینا رقیب همدیگه نیستن که با هم مقایسه بشه! هر کدومش تو موارد خودش کاربرد داره و زیاد با هم تداخل ندارن!
2- فرمت رمزگذاری؟! مگه کوکی ها رمزگذاری هم میشن؟ خوب متنی رو که میخواید تو کوکی ذخیره کنید به هر متدی که بخواید میشه هش کرد اما به صورت خودکار که رمزگذاری نمیشه (چون در هر صورت وقتی که رمزگذاری بشه امنیتش فرق زیادی با اون موقع که متن ساده باشه نداره چون اگر کوکی دزدیده بشه اگر هم رمزگذاری شده باشه باز همون کارایی رو داره و اصل قضیه تفاوتی نمیکنه!)
3- سشن رو همونطور که از اسمش پیداست معمولاً برای کنترل فعالیت یک کاربر در طی یک سری بازدید استفاده میکنن مثلاً برای اینکه مشخص بشه که کاربر لوگین کرده یا نه و یا برای ذخیره تنظیمات و اطلاعاتی که ممکنه طی یک سری بازدید مورد نیاز هست و انتقال این اطلاعات بین اسکرپتهای مختلفی که ممکنه طی این جلسه اجرا بشن استفاده میکنن. هندل سشنها به طور عادی بعد از بسته شدن مرورگر حذف میشه و در بازدید بعدی یک هندل جدید براش ایجاد میشه همچنین سشنها بعد از یک مدت مشخص در صورت عدم فعالیت کاربر در سرور حذف میشن (مثلاً نیم ساعت) البته امکان تعیین طول عمر سشن هم هست اما فقط در موراد خاص استفاده میشه
کوکی ها تا زمانی که باطل نشده باشن زنده میمونن که طول عمرشون رو هم همون موقع که ست میشن میشه تعیین کرد. برای ذخیره تنظیماتی که حیاتی نیستن و باید طی مدت طولانی (بیشتر از یک جلسه) تو مرورگر باقی بمونن میشه از کوکی استفاده کرد مثلاً تنظیمات گوگل رو دیدید؟ اون قسمت که تنظیمات جستجو رو انجام میدید و تعداد نتایج رو در هر صفحه ذخیره مشخص میکنید این تنظیمات در کوکی ذخیره میشه و طول عمر کوکیش هم زیاده و تا وقتی که کوکیها دستی پاک نشن همون تنظیمات اعمال میشه
4- بله و خیر! خیلی جاها میتونن ولی خیلی جاها نباید جانشین هم بشن! اینا ابزارهایی هستن که دست برنامه نویسه که تصمیم بگیره از هر کدوم چه استفاده ای بکنه. در کل ذخیره اطلاعات خصوصی در کوکی ها مشکل امنیتی داره. از طرفی با توجه به اینکه سشنها در هر بازدید ریست میشن و در بازدید بعدی باید از اول پر بشن و احیانا تنظیمات رو دوباره از دیتابیس بخونن اما طول عمر کوکی ها رو میشه بدون کوچکترین تأثیری روی سرور به مقدار دلخواه تنظیم کرد باعث میشه که کوکی ها محل خوبی برای ذخیره یک تنظیمات معمولی و درازمدت کاربر باشن
یه چیز دیگه هم اضافه کنم! کوکی که برای هر سایت 4 کیلوبایت بیشتر مجاز نیست ولی من برای سشن فکر میکنم محدودیت حجمی پیدا نکردم در هر صورت نباید برای ذخیره کردن یه خروار اطلاعات از سشن استفاده بشه یعنی باید در نظر داشت که سشن دیتابیس نیست! هر گقدر اطلاعات که در سشن ذخیره کنید به همراه لود شدن تک تک اسکرپتهای سایت لود میشه و اگر حجم اطلاعاتش زیاد باشه و بد تر از اون استفاده هم نشه چیزی به جز هدر دادن منابع سرور نیست!
برگرفته از : http://forum.p30world.com/showthread.php?t=322368&p=3818692&viewfull=1#post3 818692
انشاالله توضیحات این بخش به مرور زمان تکمیل تر میشه.
در پناه حق پیروز و سربلند باشید
موضوعات مشابه:
علاقه مندی ها (Bookmarks)