程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> ASP.NET >> 關於ASP.NET >> Session服務器配置指南與使用經驗

Session服務器配置指南與使用經驗

編輯:關於ASP.NET

一.摘要

所有Web程序都會使用Session保存數據. 使用獨立的Session服務器可以解決 負載均衡場景中的Session共享問題.本文介紹.NET平台下建立Session服務器的幾 種辦法, 並介紹在使用Session時的各種經驗和技巧.

二.關於Session,SessionID和Cookies

Session數據保存在服務器端, 但是每一個客戶端都需要保存一個SessionID, SessionID保存在Cookies中, 關閉浏覽器時過期.

在向服務器發送的HTTP請求中會包含SessionID, 服務器端根據SessionID獲取 獲取此用戶的Session信息.

很多初級開發人員不知道SessionID和Cookies的關系, 所以常常認為兩者沒有 聯系. 這是不正確的. 正是因為SessionID保存在Cookies中, 所以在我們保存 Cookies的時候,一定要注意不要因為Cookies的大小和個數問題而導致SessionID 對象. 在我們的程序中, 對SessionID的Cookies有特殊的處理:

    /// <summary>
    /// 寫入cookie.
     /// </summary>
    /// <param  name="day"></param>
    ///  <returns></returns>
    public bool SetCookie(int  day)
    {
      string CookieName = GetType ().ToString();
      HttpCookie SessionCookie =  null;

      //對 SessionId 進行備份.
      if  (HttpContext.Current.Request.Cookies["ASP.NET_SessionId"] != null)
      {
        string SesssionId =  HttpContext.Current.Request.Cookies ["ASP.NET_SessionId"].Value.ToString();
         SessionCookie = new HttpCookie("ASP.NET_SessionId");
         SessionCookie.Value = SesssionId;

      }

       //省略掉中間的代碼部分.只保留備份SessionID和找回SessionID的邏 輯

      

      //如果cookie總數超過20 個,  重寫ASP.NET_SessionId, 以防Session 丟失.
      if  (HttpContext.Current.Request.Cookies.Count > 20 &&  SessionCookie != null)
      {
        if  (SessionCookie.Value != string.Empty)
        {    
          HttpContext.Current.Response.Cookies.Remove ("ASP.NET_SessionId");
           HttpContext.Current.Response.Cookies.Add(SessionCookie);
         }
      }

      return true;
    }

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved