同桌上课用手指进去了好爽_欧美丰满熟妇xxⅹⅹ性大i_成人av天天日天天拍拍_猛男gay帅男gay男男同志_欧美va天堂在线观看_人妻无码av中文系列三里桃花_亚欧免费无码在线观看_久久久精品国产亚洲av水_日韩在线免费看污污污_2021无码专区人妻系列日韩

首頁 優(yōu)化推廣 Session服務器配置指南與使用經驗

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

來源: | 時間:2010/8/9 14:43:30 |

一.摘要

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

二.關于Session,SessionID和Cookies

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

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

很多初級開發(fā)人員不知道SessionID和Cookies的關系, 所以常常認為兩者沒有聯(lián)系. 這是不正確的. 正是因為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服務器的幾種方式

將Session保存在獨立的服務器中可以實現在多臺Web服務器之間共享Session.雖然我們也可以自己開發(fā)Session存儲系統(tǒng), 但是使用ASP.NET自帶的存儲機制將更加便捷.

.NET提供了5種保存Seission的方式:

方式名稱

存儲方式 性能

Off

設置為不使用Session功能

InProc

設置為將Session存儲在進程內,就是ASP中的存儲方式,這是默認值。

性能最高

StateServer

設置為將Session存儲在獨立的狀態(tài)服務中。通常是aspnet_state.exe進程.

性能損失10-15%

SQLServer

設置將Session存儲在SQL Server中。

性能損失10-20%

Customer

自定制的存儲方案

由實現方式確定

 

 

 

我們可以在Web.Config中配置程序使用的Session存儲方式.默認情況下是InProc, 即保存在IIS進程中. 關于Off, InProc和Customer本文不做講解. 相關文章大家都可以在網上搜索到.

下面主要講解 StateServer 和 SQLServer 的應用.

四.使用 StateServer 模式搭建Session服務器

(1)服務器端配置

1.啟動 Asp.net State service服務.(這個服務默認的狀態(tài)為手動.修改為自動并啟動.)

2.修改注冊表: [HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\aspnet_state\Parameters]

設置 AllowRemoteConnection = 1 , 設置 Port = 42424 (十進制,默認即為42424)

Port是服務的端口號

AllowRemoteConnection 表示是否允許其他機器連接,0為僅能本機使用,1為可以供其他機器使用.

(2)客戶端設置

在Web應用程序的Web.Config中, 我們需要修改 <configuration> / <system.web> 的<sessionState>節(jié)點.如果沒有

沒有則添加(默認使用的是InProc方式)

<sessionState 
mode="StateServer" 
stateConnectionString="tcpip=服務器ip:42424" 
cookieless="false" 
timeout="60"/>

上面的參數我們可以根據需要修改.

 

五.使用SqlServer模式搭建Session服務器

(1)服務器端配

服務熱線

153 8323 9821

功能和特性

價格和優(yōu)惠

網站和維護

推廣和優(yōu)化

微信服務號