更新時間:2022-01-25 11:51:04 來源:動力節點 瀏覽845次
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;
}
將Session保存在獨立的服務器中可以實現在多臺Web服務器之間共享Session.雖然我們也可以自己開發Session存儲系統, 但是使用ASP.NET自帶的存儲機制將更加便捷.
.NET提供了5種保存Seission的方式:
方式名稱 | 存儲方式 | 性能 |
---|---|---|
Off | 設置為不使用Session功能 | 無 |
InProc | 設置為將Session存儲在進程內,就是ASP中的存儲方式,這是默認值。 | 性能最高 |
StateServer | 設置為將Session存儲在獨立的狀態服務中。通常是aspnet_state.exe進程. | 性能損失10-15% |
SQLServer | 設置將Session存儲在SQL Server中。 | 性能損失10-20% |
Customer | 自定制的存儲方案 | 由實現方式確定 |
我們可以在Web.Config中配置程序使用的Session存儲方式.默認情況下是InProc, 即保存在IIS進程中. 關于Off, InProc和Customer本文不做講解. 相關文章大家都可以在網上搜索到。如果大家想了解更多相關知識,不妨來關注一下動力節點的Java在線學習,里面的課程內容全面細致,通俗易懂,適合小白學習,希望對大家能夠有所幫助。
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習