Session چیست؟
در علم رایانه به خصوص شبکه،Session  یک مبادله ی اطلاعات متقابل و نیمه دایمی است که به عنوان یک دیالوگ یا مکالمه (conversation) یا نشست (meeting) بین دو یا چند ابزار ارتباطی یا بین یک کامپیوتر و یک کاربر نیز شناخته می شود.یک session در یک نقطه ی خاصی از زمان بوجود می آید و در نقطه بعدی از زمان از بین می رود.

یک session بوجود آمده ی ارتباطی ممکن است دربردارنده ی بیش از یک پیغام در هر مسیر باشد.

Communication session ها ممکن است به عنوان بخشی از پروتکل ها و سرویسها در یکی از لایه های application ، sessionو transport در مدل OSI (مدل هفت لایه   OSI که شامل لایه های Application، Presentation ، Session ، Transport ، Network، Data-Link و لایه های فیزیکی می شود.) پیاده سازی شوند.


پیاده سازی نرم افزاری


TCP Sessionها معمولا با استفاده از child processes و/یا multithreading در نرم افزار پیاده سازی می شوند. به این صورت که هنگامیکه یک کامپیوتر یک Session را بوجود می آورد یا به آن ملحق می شود ،یک Process یا Thread جدید بوجود می آید.  Http Session ها معمولا به صورت یک thread برای هر session پیاده سازی نمی شوند بلکه برای پیاده سازی آنها ازیک database با اطلاعات مربوط به وضعیت  هر session استفاده می شود.مزیت چند process یا چند thread، پیچیدگی نرم افزار در عین آسودگی خیال است زیرا هر thread نمونه ای از پیشینه و متغیر های کپسوله شده ی خودش می باشد. اما ایراد آن میزان پردازش بالا بر حسب منابع سیستم است و اینکه session ممکن است در صورت restart شدن سیستم از هم گسیخته شود.

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


Web Session های سمت سرور


sessionهای سمت سرور سودمند و کارا هستند اما کار کردن با آنها می تواند سخت باشد و در سیستم های تعبیه شده ی فاقد فضای ذخیره سازی از آنها استفاده نمیشود.

یک متد برای استفاده از sessionهای سمت سرور در سیستم هایی که دارای ذخیره ی زیاد نیستند این است که بخشی از RAM را برای ذخیره ی داده های session رزرو کنیم. این روش برای مواردی که تعداد محدودی کاربر دارند کاربرد دارد.(مثلا" یک مسیریاب(router) یا accpess point با دسترسی کم یا دسترسی نه بیشتر از یک کاربر در یک زمان.)


Web Sessionهای سمت کاربر


sessionهای  سمت کاربر از cookie و تکنیک های پنهانی( cryptographic techniques )استفاده می کنند.


چگونه کار می کنند


در انتهای اجرای یک صفحه ی وب داینامیک ،مقدار متغیر های session حساب می شود و به کاربر از طریق یک cookie منتقل می شود.در این مرحله وضعیت session به طور کامل و فقط روی فایل سیستم کاربر (یا RAM) قرار میگیرد.

برای هر درخواست(request) موفق کوکی به سرور فرستاده می شود و سرور از آن برای یادآوری وضعیت برنامه درمورد آن کاربر خاص استفاده می کند.

هرچند این مکانیزم در بعضی زمینه ها ممکن است بسنده باشد اما در مواردی که قابلیت اعتماد و امنیت ضروری هستند، ممکن است پذیرفته نشود. در صورت تمایل به استفاده از sessionهای سمت کاربر به جای سمت سرور موارد زیر باید تضمین شود:


1.       confidentiality(قابلیت اعتماد((اختیاری): به جز سرور هیچ چیز دیگری نباید به اطلاعات session دسترسی داشته باشد.

2.       data integrity(امنیت داده) : به جز سرور هیچ چیز دیگری نباید داده های Session را دستکاری کند چه عمدا" و چه تصادفا".

3.       authenticity(سندیت) : به جز سرور هیچ چیز دیگری نباید بتواند Session معتبر ایجاد کند.


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

اگر برای مدتی کاربر با سایت کار نکند یا اینکه سایت را ببند ،session اصطلاحا expire می شود و این expiration time را می توانیم خودمان تعیین کنیم . در ASP.NET به صورت پیش فرض session expiration، 15 دقیقه می باشد.


Sessionها از روش دیگری نیز استفاده می کنند و آن هم بدون استفاده از cookie است و به این Sessionها cookieless sessions گفته می شود .




منابع:

[1] http://en.wikipedia.org/wiki/Session_(computer_science)

[2] http://en.wikipedia.org/wiki/OSI_model

[3] http://msdn.microsoft.com/en-us/library/ms972429.aspx