|
所有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;
}
三.搭建Session服務器的幾種方式
將Session保存在獨立的服務器中可以實現在多臺Web服務器之間共享Session.雖然我們也可以自己開發Session存儲系統, 但是使用ASP.NET自帶的存儲機制將更加便捷.
.NET提供了5種保存Seission的方式:
方式名稱 | 存儲方式 | 性能 |
Off | 設置為不使用Session功能 | 無 |
InProc | 性能最高 | |
StateServer | 性能損失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服務.(這個服務默認的狀態為手動.修改為自動并啟動.)
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>節點.如果沒有
沒有則添加(默認使用的是InProc方式)
復制代碼 代碼如下:
<sessionState
mode="StateServer"
stateConnectionString="tcpip=服務器ip:42424"
cookieless="false"
timeout="60"/>
上面的參數我們可以根據需要修改.
五.使用SqlServer模式搭建Session服務器
(1)服務器端配置
使用SqlServer模式搭建Session服務器端有兩種方式. ASP.NET 1.0和1.1版本請使用方式a, 2.0即以上版本請使用方式b.
a.使用SQL文件創建Session數據庫
在ASP.NET 1.0和1.1 版本中, 只能使用這種方式.對于2.0及其以上版本,請使用ASPNET_regsql.exe工具.(當然此方法也通用2.0版本)
.NET提供了數據庫安裝腳本,可以在機器的windows文件夾中找到:
C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/ InstallSqlState.sql
C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/ InstallSqlStateTemplate.sql
根據ASP.NET的版本不同, 需要使用不同的SQL腳本. ASP.NET主要有1.1和2.0兩個版本,可以在不同的版本文件夾找到這兩個SQL.
InstallSqlState.sql 是創建默認名稱的數據庫"[ASPState]".此SQL可以直接運行.
InstallSqlStateTemplate.sql 可以使用自己指定的數據庫保存數據.此SQL需要自己修改后運行, 打開SQL文件將其中 [DatabaseNamePlaceHolder] 替換為自己指定的數據庫名稱.
執行installsqlstate.sql時不需要指定數據庫,可以在任意數據庫上執行.此SQL會自己創建新的數據庫
b. 使用ASPNET_regsql.exe工具
ASP.NET 2.0版本后微軟提供了ASPNET_regsql.exe工具可以方便的配置Session數據庫.該工具位于 Web 服務器上的"系統根目錄/Microsoft.NET/Framework/版本號"文件夾中.
使用舉例:
ASPNET_regsql.exe -S . -U sa -P 123456 -ssadd -sstype p
-S參數:
表示數據庫實例名稱. 可以用"."表示本機.
-U和-P參數:
表示用戶名和密碼.
-E參數:
可以再-U
主站蜘蛛池模板:
亚洲AV无码偷拍在线观看
|
色综合久久天天影视网
|
国产精品亚洲电影久久成人影院
|
手机在线国产视频
|
英国video性精品高清最新
|
欧美中文字幕一区二区三区
|
美女搜查官被高难度黑人在线播放
|
国产精品第十页
|
大地影院日本韩国电影免费观看
|
野花香HD免费高清版6高清版
|
情欲.美女高潮
|
芒果影院网站在线观看
|
国产欧美日韩视频怡春院
|
日韩国产精品欧美一区二区
|
中文字幕亚洲第一页
|
japanesen女同|
国产午夜精品一区二区三区
|
亚洲 欧美 日本 国产 高清
|
久久精品麻豆国产天美传媒果冻
|
久久麻豆亚洲AV成人无码国产
|
青青草原在线免费
|
在线欧美免费人成视频
|
国产精品高清在线观看地址
|
校园纯肉H教室第一次
|
国内自拍 在线 亚洲 欧美
|
日本免费xxx
|
国产老师开裆丝袜喷水漫画
|
日韩亚洲国产欧美免费观看
|
性欧美sexovideotv
|
猫咪最新破解版下载
|
日韩精品在线观看免费
|
精子网久久国产精品
|
最新高清无码专区在线视频
|
不卡人妻无码AV中文系列APP
|
亚洲高清视频一区
|
亚洲成AV人电影在线观看
|
色欲精品久久人妻AV中文字幕
|
国产不卡无码高清视频
|
精品淑女少妇AV久久免费
|
亚洲国产精品嫩草影院久久
|
老妇高潮潮喷到猛进猛出
|