通過ASP.NET StateServer實現進程外Session存儲

通過ASP.NET StateServer實現進程外Session存儲

我們平常啓動瀏覽器去訪問網站經常會涉及到Session的讀和寫,但是通常的Session是保存在當前的進程中,即訪問網站的瀏覽器進程,如關閉此瀏覽器,再打開訪問,Session就會丟失...

一般長時間保持Session會用到SqlServer數據庫的方式存儲Session;

但是如何進程間共享Session呢,一般安裝了.NET Framework的電腦,在控制面板"程序"中啓動IIS的相關.NET Framework框架功能

然後

1.打開註冊表,regedit,找到HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\aspnet_state\Parameters

  a.將AllowRemoteConnection值設置爲1    //是否啓用遠程服務,0爲僅Localhost

  [b.將Port值設置爲a5b8(十六進制),即十進制42424(默認值)] 


2.打開"服務",找到"ASP.NET State Service"服務,啓動該服務。(相關exe位置C:\Windows\Microsoft.NET\Framework64\v4.0.30319)

3.在當前web項目的配置文件web.config文件system.web節點下添加

  <sessionState mode="StateServer" stateConnectionString="tcpip=localhost(或遠程地址):42424"></sessionState>


[csharp] view plaincopy
  1. <span style="white-space:pre">    </span>if (Session["Test"] == null)  
  2.         {  
  3.             Response.Write("Session星球上暫時還沒有人,正在造人~");   
  4.             Session["Test"] = new Person("小航哥""男", 18);  
  5.         }  
  6.         else  
  7.         {  
  8.             Person p = Session["Test"as Person;    <strong><span style="color:#33ff33;"> </span><span style="background-color: rgb(102, 255, 153);">//注意,要使用StateServer保存對象,除了基本類型的數據,其他類對象必須可以序列化[Serializable]</span></strong>  
  9.             Response.Write(String.Format("Session星球有一個人,他叫{0},{1},{2}歲",p.Name,p.Sex,p.Age));  
  10.         }  


PS:原以爲打開瀏覽器,設置Session後關閉瀏覽器,再打開Session會保存,但經測試,每次關閉瀏覽器再打開後會導致Session丟失...但只要瀏覽器不關閉,即使網站服務器關閉,下次在訪問時,Session依然會保持...猜測是新的窗口打開默認判斷打開新的對話故丟失Session,具體原因未知...若有人有解決方案,望告知
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章