یکی از موارد مهم State Management (مدیریت حالت) در برنامه های وب دات نت (ASP.NET ) عنصر Session می باشد.
برای فعال و یا غیر فعال نمودن Session گزینه های مختلفی وجود دارد از جمله :
فعال و یا غیر فعال نمودن Session در فایل Web.config
فعال و یا غیر فعال نمودن Session توسط خصوصیت EnableSessionState مربوط به رهنمود @Page
در مورد اول این خصیصه برای تمام صفحات اعمال خواهد شد اما در مورد دوم این خصیصه تنها برای صفحه ای که در رهنمود @Page آن خصوصیت EnableSessionState برابر false قرار گرفته اعمال خواهد شد.
تا قبل از ASP.NET4.0 امکان تغییر رفتار Session از طریق کدنویسی و به طور داینامیک نبود اما با ظهور ASP.NET4.0 هم اکنون این امکان برای شما فراهم شده تا بتونید Session رو از طریق کدنویسی و داینامیک و طبق شرایط خاص خودتون فعال و یا غیر فعال کنید.
درASP.NET4.0 متد جدیدی تحت نام SetSessionStateBehavior در کلاس HttpContext معرفی شده که ورودی enum ای از جنس System.Web.SessionState.SessionStateBehavior رو دریافت می کند و متناسب با نوع enum پاس شده رفتار خواهد کرد.
مثال:
برای درک بهتر مطلب مثالی رو باهم بررسی خواهیم نمود
فرض کنید سه نوع کاربر در معماری سایت شما وجود دارند و شما می خواهید این خصیصه تنها برای کاربران طلایی سایت فعال شود و در غیر اینصورت و برای مابقی کاربران این خصیصه فعال نباشد و یا تنها خواندنی باشد و ...
برای پیاده سازی این موضوع بهترین راه نوشتن یک HttpModule سفارشی می باشد .
01.using System.Web;
02.
03.namespace MS.HttpModule.SessionState
04.{
05. public class ChangeSessionState : IHttpModule
06. {
07. public void Dispose() { }
08. public void Init(HttpApplication context)
09. {
10. context.BeginRequest += (sender, e) =>
11. {
12. HttpContext currentContext = (sender as HttpApplication).Context;
13. if (!string.IsNullOrEmpty(currentContext.Request.QueryString["memberType"]))
14. if (currentContext.Request.QueryString["memberType"].ToString().Equals("Gold"))
15. currentContext.SetSessionStateBehavior(System.Web.SessionState.SessionStateBehavior.Required);
16. else
17. currentContext.SetSessionStateBehavior(System.Web.SessionState.SessionStateBehavior.ReadOnly);
18. else
19. currentContext.SetSessionStateBehavior(System.Web.SessionState.SessionStateBehavior.Disabled);
20. };
21. }
22. }
23.}