上篇博文介紹了在客戶端狀態管理的兩種方式:http://www.cnblogs.com/wolf-sun/p/3329773.html。除了在客戶端上保存狀態外,還可以在服務器上保存狀態。使用客戶端的狀態,其缺點在於增加了數據在網絡之間的傳送。使用服務器端狀態的缺點在於,服務器必須給客戶端分配資源,下面詳細討論服務器端的狀態管理技術。
服務器端的狀態管理
Session
會話狀態與浏覽器會話相關。客戶在服務器上第一次打開Asp.Net頁面時,會話就開始了。當客戶在20分鐘之內沒有訪問服務器,會話結束,銷毀session。
可以在Global Application類(即全局應用程序類)中定義自己的代碼,會話開始或結束時運行。會創建Global.asax文件。在這個文件中,定義了一些時間處理程序例程:
public class Global : System.Web.HttpApplication { protected void Application_Start(object sender, EventArgs e) { } protected void Session_Start(object sender, EventArgs e) { } protected void Application_BeginRequest(object sender, EventArgs e) { } protected void Application_AuthenticateRequest(object sender, EventArgs e) { } protected void Application_Error(object sender, EventArgs e) { } protected void Session_End(object sender, EventArgs e) { } protected void Application_End(object sender, EventArgs e) { } }
會話狀態可以存儲在HttpSessionState對象中。與當前Http環境相關的會話狀態對象可以使用Page類的Session屬性來訪問。在Session_Start()事件處理程序中,可以初始化會話變量。在下面的實例中,名為mydata的會話狀態被初始化為0:
1 protected void Session_Start(object sender, EventArgs e)
2 {
3 Session["mydata"] = 0;
4 }
可以在頁面中通過使用會話狀態名讀取會話狀態。
protected void Unnamed2_Click(object sender, EventArgs e) { int val = (int)Session["mydata"]; myLabel.Text = val.ToString(); val += 5; Session["mydata"] = val; }