一区二区久久-一区二区三区www-一区二区三区久久-一区二区三区久久精品-麻豆国产一区二区在线观看-麻豆国产视频

Session服務器配置指南與使用經(jīng)驗的深入解析

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

二.關(guān)于Session,SessionID和Cookies
Session數(shù)據(jù)保存在服務器端, 但是每一個客戶端都需要保存一個SessionID, SessionID保存在Cookies中, 關(guān)閉瀏覽器時過期.

在向服務器發(fā)送的HTTP請求中會包含SessionID, 服務器端根據(jù)SessionID獲取獲取此用戶的Session信息.
很多初級開發(fā)人員不知道SessionID和Cookies的關(guān)系, 所以常常認為兩者沒有聯(lián)系. 這是不正確的. 正是因為SessionID保存在Cookies中, 所以在我們保存Cookies的時候,一定要注意不要因為Cookies的大小和個數(shù)問題而導致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總數(shù)超過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保存在獨立的服務器中可以實現(xiàn)在多臺Web服務器之間共享Session.雖然我們也可以自己開發(fā)Session存儲系統(tǒng), 但是使用ASP.NET自帶的存儲機制將更加便捷.
.NET提供了5種保存Seission的方式:

方式名稱

存儲方式性能

Off

設(shè)置為不使用Session功能

InProc

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

性能最高

StateServer

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

性能損失10-15%

SQLServer

設(shè)置將Session存儲在SQL Server中。

性能損失10-20%

Customer

自定制的存儲方案

由實現(xiàn)方式確定

我們可以在Web.Config中配置程序使用的Session存儲方式.默認情況下是InProc, 即保存在IIS進程中. 關(guān)于Off, InProc和Customer本文不做講解. 相關(guān)文章大家都可以在網(wǎng)上搜索到.
下面主要講解 StateServer 和 SQLServer 的應用.

四.使用 StateServer 模式搭建Session服務器
(1)服務器端配置
1.啟動 ASP.NET State service服務.(這個服務默認的狀態(tài)為手動.修改為自動并啟動.)
2.修改注冊表: [HKEY_LOCAL_MACHINE/SYSTEM/ControlSet001/Services/ASPNET_state/Parameters]
設(shè)置 AllowRemoteConnection = 1 , 設(shè)置 Port = 42424 (十進制,默認即為42424)
Port是服務的端口號
AllowRemoteConnection 表示是否允許其他機器連接,0為僅能本機使用,1為可以供其他機器使用.

(2)客戶端設(shè)置
在Web應用程序的Web.Config中, 我們需要修改 <configuration> / <system.web> 的<sessionState>節(jié)點.如果沒有
沒有則添加(默認使用的是InProc方式)
復制代碼 代碼如下:
<sessionState
mode="StateServer"
stateConnectionString="tcpip=服務器ip:42424"
cookieless="false"
timeout="60"/>

上面的參數(shù)我們可以根據(jù)需要修改.

五.使用SqlServer模式搭建Session服務器
(1)服務器端配置
使用SqlServer模式搭建Session服務器端有兩種方式. ASP.NET 1.0和1.1版本請使用方式a, 2.0即以上版本請使用方式b.

a.使用SQL文件創(chuàng)建Session數(shù)據(jù)庫
ASP.NET 1.0和1.1 版本中, 只能使用這種方式.對于2.0及其以上版本,請使用ASPNET_regsql.exe工具.(當然此方法也通用2.0版本)
.NET提供了數(shù)據(jù)庫安裝腳本,可以在機器的windows文件夾中找到:
C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/ InstallSqlState.sql
C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/ InstallSqlStateTemplate.sql
根據(jù)ASP.NET的版本不同, 需要使用不同的SQL腳本. ASP.NET主要有1.1和2.0兩個版本,可以在不同的版本文件夾找到這兩個SQL.
InstallSqlState.sql 是創(chuàng)建默認名稱的數(shù)據(jù)庫"[ASPState]".此SQL可以直接運行.
InstallSqlStateTemplate.sql 可以使用自己指定的數(shù)據(jù)庫保存數(shù)據(jù).此SQL需要自己修改后運行, 打開SQL文件將其中 [DatabaseNamePlaceHolder] 替換為自己指定的數(shù)據(jù)庫名稱.
執(zhí)行installsqlstate.sql時不需要指定數(shù)據(jù)庫,可以在任意數(shù)據(jù)庫上執(zhí)行.此SQL會自己創(chuàng)建新的數(shù)據(jù)庫

b. 使用ASPNET_regsql.exe工具
ASP.NET 2.0版本后微軟提供了ASPNET_regsql.exe工具可以方便的配置Session數(shù)據(jù)庫.該工具位于 Web 服務器上的"系統(tǒng)根目錄/Microsoft.NET/Framework/版本號"文件夾中.
使用舉例:
ASPNET_regsql.exe -S . -U sa -P 123456 -ssadd -sstype p
-S參數(shù):
表示數(shù)據(jù)庫實例名稱. 可以用"."表示本機.
-U和-P參數(shù):
表示用戶名和密碼.
-E參數(shù):
可以再-U

主站蜘蛛池模板: 午夜黄色大片 | 自拍偷自拍亚洲精品被多人伦好爽 | 看全色黄大色黄大片大学生 | 免费视频一区二区三区四区 | 亚洲午夜视频在线观看 | 国产激情视频网站 | 狠久久| 日本加勒比在线视频 | 五月婷婷六月激情 | 伊人蕉久 | 精彩视频一区二区 | 最新69国产成人精品视频69 | 5g成人影院 | 亚洲午夜小视频 | 色图综合 | 欧美一卡2卡三卡四卡五卡 欧美一欧美一区二三区性 欧美一区a | 狠狠色噜噜狠狠狠狠97不卡 | 激情丁香婷婷 | 国产狂喷冒白浆免费视频 | 91麻豆国产精品91久久久 | 91短视频版在线观看免费 | 久久99亚洲综合精品首页 | 最近免费中文在线视频 | 中文字幕日本不卡一二三区 | 快播黄色 | 色婷婷综合久久久久中文一区二区 | 欧美亚洲国产精品久久久 | 亚洲第一色图 | 久久伊人精品热在75 | xxxxxwwww免费视频 | 午夜久久久久久网站 | 日韩欧美精品一区二区三区 | 久久精品99成人中文字幕880 | 影音先锋 色天使 | 欧美视频在线免费 | 亚洲精品福利在线观看 | 亚洲第一区视频在线观看 | 国产精品久久久久毛片真精品 | 色综合精品久久久久久久 | 激情五月开心网 | 国产在线观看人成激情视频 |