ماهي Session في ASP.Net

ggg
يُمكنك الـ Session في ASP.NET من تخزين متغيرات في صفحة معينة ومن ثم استرجاعها في صفحة أخرى أي أنها تسمح لك بتخزين متغيرات عند الانتقال بين الصفحات.

تخزن المتغيرات في الغرض SessionStateItemCollection في الخاصية HttpContext.Session في صحفة ASP.Net

عند تخزين المتغيرات في session نعطي لكل متغير مفتاح key وهو الذي سنقوم باسترجاع المتغير عن طريقه مثال لنقم بتخزين الاسم والأول والاسم الثاني من الحقلين FirstNameTextBox و LastNameTextBox:


Session["FirstName"] = FirstNameTextBox.Text;
Session["LastName"] = LastNameTextBox.Text;

وعند استرجاعهما نكتب:

String firstName =(String) session[“FirstName”];
String lastName =(String) session[“LastName”];

لاحظ أنه عند استرجاع القيم يجب عمل Casting أي تحديد نوع القيمة التي أريد استرجاعها من الSession

يمكن تخزين أي نوع من المتغيرات سواء أكانت primitive types مثل int أو double أو حتى Objects

مثلًا لنقم بتخزين غرض ArrayList Object في متغير(مفتاح) StockPicks :


Session["StockPicks"] = stockPicks;

عند الاسترجاع نكتب:

ArrayList stockPicks = (ArrayList)Session["StockPicks"];

تستخدم السيشن ( الجلسة ) لتخزين بيانات المستخدم على السيرفر لفترة زمنية محددة ( افتراضيا 20 دقيقة ) , لكل سيشن ID فريد يميزها عن غيرها حتى لو كان لهم نفس الاسم فلا مشكلة , يقوم السيرفر بربط طلبات مستعرض معين مع السيشن الخاص به عن طريق هذا الـ ID حيث يتم أرساله واستقباله عبر cookie , أو عبر الـ URL إذا كانت الخاصية cookieless تساوي true كما سنرى لاحقا.
والسيشن تنشأ لكل مستخدم في بداية تصفحه للموقع ويتم إطلاق الحدث Session_OnStart , وعند انتهاء زمن السيشن يتم إطلاق الحدث Session_OnEnd

من أهم خصائص الـ session :

Timeout : تحديد الفترة الزمنية للإحتفاظ بالسيشن مقدرة بالدقائق ( افتراضيا 20 دقيقة ) ويتم إعادة البدء بحساب الزمن من الصفر عند كل عملية وصول للسيشن ( قراءة أو كتابة ) , أكبر قيمة يمكن أن تأخذها هذه الخاصية هي 525600 وهي تعادل سنة واحدة .

Mode : وهي تحدد طريقة تخزين السيشن على السيرفر وتأخذ أحد القيم التالية :

1- InProc : وهو الخيار الافتراضي , حيث يتم تخزين السيشن في ذاكرة السيرفر ( رام ) وهو نمط التخزين الوحيد الذي يدعم الحدث Session_OnEnd

2- StateServer : يتم تخزين السيشن في بروسيس ( process ) مستقلة عن بروسيس التطبيق , وبالتالي تضمن الاحتفاظ بقيمها في حالة إعادة تشغيل التطبيق ( restart ) كما تسمح بالوصول للقيم من أكثر من web service واحدة

3- SQLServer : يتم تخزين السيشن في قاعدة بيانات SQL Server , وبالتالي تضمن الاحتفاظ بقيمها في حالة إعادة تشغيل التطبيق ( restart ) كما تسمح بالوصول للقيم من أكثر من web service واحدة

4- Custom : حيث نحدد أسلوب خاص بنا لتخزين السيشن , يتطلب تحضيرات عديدة كتعريف الاتصال وطريقة التخزين وغيره …

5- Off : إلغاء تفعيل السيشن

Cookieless : تحدد أسلوب تبادل معلومات السيشن بين السيرفر والمتصفح وتأخذ أحد القيم التالية :

AutoDetect : يقوم بتحديد هل المتصفح يدعم استخدام الـ cookie فإن كان يدعمها فيتم استخدام الـ cookie وإلا فإنه يتم تمرير معلومات السيشن عبر الـ URL

UseCookies : الإصرار على استخدام الكوكيز بغض النظر إن كانت مدعومة من المتصفح أم لا , وهو الخيار الافتراضي

UseUri : استخدام الـ URL لتبادل معلومات السيشن حتى إن كان المتصفح يدم الكوكيز

True : منع استخدام الكوكيز الخاصين بالسيشن وبالتالي استخدام الـURL

False : السماح باستخدام الكوكيز الخاصين بالسيشن

IsCookieless : تعيد True إذا كانت معلومات السيشن مضمنة في الـ URL , وإلا فإنها تعيد
False

قسم عملي :

في البداية نقوم باستدعاء فضاء العناوين التالي


using System.Web.SessionState;

إنشاء سيشن اسمها MySession وقيمتها Hello World


Session["MySession"] = "Hello World";

الحصول على ID السيشن السابقة

string id = Session.SessionID;

تحديد زمن بقاء السيشن بـ 30 دقيقة


Session.Timeout = 30;

قراءة المعلومات المخزنة بالسيشن


string value = Session["MySession"].ToString();

معرفة أسلوب تخزين السيشن على السيرفر


string mode = Session.Mode.ToString();

معرفة قيمة الخاصية IsCookieless


bool is_cookieless = Session.IsCookieless;