實現會話持久化(Permanent Session)

來源:互聯網
上載者:User
session|session   
//注意,需要引用System.Runtime.Serialization.Formatters.Soap.dll程式集 
public const string SESSIONDATAPATH = "C:\SessionData\" ;
private void Application_AcquireRequestState( object sender, EventArgs e)                           
 {     
       System.IO.FileStream fs; 
        System.Runtime.Serialization.Formatters.Soap.SoapFormatter sf  =  new System.Runtime.Serialization.Formatters.Soap.SoapFormatter(); 
        try 
        {  
            //擷取特定的cookie,如果找不到,則退出.
            HttpCookie cookie = Request.Cookies["PermSessionID"]; 
            if(cookie == null) 
            {
                //如果找不到,則產生一個(使用偽隨機的SessionID) 
               cookie = new HttpCookie("PermSessionID", Session.SessionID);
               //使該cookie在1星期之後到期
               cookie.Expires = DateTime.Now.AddDays(7);
               //將其發往用戶端瀏覽器 
               Response.Cookies.Add(cookie); 
            }
             //檔案名稱等於該cookie的值 
             string permSessionId = cookie.Value; 
             //產生資料檔案的名稱 
            string filename = SESSIONDATAPATH + permSessionId.ToString() + ".xml"; 
            //開啟檔案,如果出錯,則退出 
            fs = new System.IO.FileStream(filename, IO.FileMode.Open); 
            //還原序列化包含值的Hashtable Hashtable ht = (Hashtable)sf.Deserialize(fs); 
            //將資料移到Session集合中 
            Session.Clear(); 
            foreach( string key in ht.Keys )
            {
                Session(key) = ht(key); 
            }
      } 
     Catch(Exception ex) {} 
      Finally 
      {
           if( fs != null ) fs.Close();
      } 
}
         以上代碼實現了會話持久話的過程,AquireRequestState事件處理常式中的代碼會試圖讀取一個名為PermSessionID的特殊的用戶端cookie。該cookie的值被視為一個XML(在伺服器上)的名稱,該XML檔案包含在前一個請求結束時儲存下來的Session變數的值,因此代碼會在頁面看到新值之前填充Session集合。如果該cookie尚不存在,說明現在看到的是從用戶端發出的第一個請求。所以代碼會建立cookie,並在其內部存放獨一無二的字串。同時也應該在ReleaseRequestState事件裡建立一個服務端的XML檔案,將所有Session變數序列化到該XML檔案中。



相關文章

Cloud Intelligence Leading the Digital Future

Alibaba Cloud ACtivate Online Conference, Nov. 20th & 21st, 2019 (UTC+08)

Register Now >

Starter Package

SSD Cloud server and data transfer for only $2.50 a month

Get Started >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。