یکی از موارد مهم 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.
}