|
所有Web程序都會(huì)使用Session保存數(shù)據(jù). 使用獨(dú)立的Session服務(wù)器可以解決負(fù)載均衡場(chǎng)景中的Session共享問(wèn)題.本文介紹.NET平臺(tái)下建立Session服務(wù)器的幾種辦法, 并介紹在使用Session時(shí)的各種經(jīng)驗(yàn)和技巧.
二.關(guān)于Session,SessionID和Cookies
Session數(shù)據(jù)保存在服務(wù)器端, 但是每一個(gè)客戶端都需要保存一個(gè)SessionID, SessionID保存在Cookies中, 關(guān)閉瀏覽器時(shí)過(guò)期.
在向服務(wù)器發(fā)送的HTTP請(qǐng)求中會(huì)包含SessionID, 服務(wù)器端根據(jù)SessionID獲取獲取此用戶的Session信息.
很多初級(jí)開(kāi)發(fā)人員不知道SessionID和Cookies的關(guān)系, 所以常常認(rèn)為兩者沒(méi)有聯(lián)系. 這是不正確的. 正是因?yàn)镾essionID保存在Cookies中, 所以在我們保存Cookies的時(shí)候,一定要注意不要因?yàn)镃ookies的大小和個(gè)數(shù)問(wèn)題而導(dǎo)致SessionID對(duì)象. 在我們的程序中, 對(duì)SessionID的Cookies有特殊的處理:
復(fù)制代碼 代碼如下:
/// <summary>
/// 寫(xiě)入cookie.
/// </summary>
/// <param name="day"></param>
/// <returns></returns>
public bool SetCookie(int day)
{
string CookieName = GetType().ToString();
HttpCookie SessionCookie = null;
//對(duì) SessionId 進(jìn)行備份.
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ù)超過(guò)20 個(gè), 重寫(xiě)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服務(wù)器的幾種方式
將Session保存在獨(dú)立的服務(wù)器中可以實(shí)現(xiàn)在多臺(tái)Web服務(wù)器之間共享Session.雖然我們也可以自己開(kāi)發(fā)Session存儲(chǔ)系統(tǒng), 但是使用ASP.NET自帶的存儲(chǔ)機(jī)制將更加便捷.
.NET提供了5種保存Seission的方式:
方式名稱 | 存儲(chǔ)方式 | 性能 |
Off | 設(shè)置為不使用Session功能 | 無(wú) |
InProc | 設(shè)置為將Session存儲(chǔ)在進(jìn)程內(nèi),就是ASP中的存儲(chǔ)方式,這是默認(rèn)值。 | 性能最高 |
StateServer | 設(shè)置為將Session存儲(chǔ)在獨(dú)立的狀態(tài)服務(wù)中。通常是ASPNET_state.exe進(jìn)程. | 性能損失10-15% |
SQLServer | 設(shè)置將Session存儲(chǔ)在SQL Server中。 | 性能損失10-20% |
Customer | 自定制的存儲(chǔ)方案 | 由實(shí)現(xiàn)方式確定 |
我們可以在Web.Config中配置程序使用的Session存儲(chǔ)方式.默認(rèn)情況下是InProc, 即保存在IIS進(jìn)程中. 關(guān)于Off, InProc和Customer本文不做講解. 相關(guān)文章大家都可以在網(wǎng)上搜索到.
下面主要講解 StateServer 和 SQLServer 的應(yīng)用.
四.使用 StateServer 模式搭建Session服務(wù)器
(1)服務(wù)器端配置
1.啟動(dòng) ASP.NET State service服務(wù).(這個(gè)服務(wù)默認(rèn)的狀態(tài)為手動(dòng).修改為自動(dòng)并啟動(dòng).)
2.修改注冊(cè)表: [HKEY_LOCAL_MACHINE/SYSTEM/ControlSet001/Services/ASPNET_state/Parameters]
設(shè)置 AllowRemoteConnection = 1 , 設(shè)置 Port = 42424 (十進(jìn)制,默認(rèn)即為42424)
Port是服務(wù)的端口號(hào)
AllowRemoteConnection 表示是否允許其他機(jī)器連接,0為僅能本機(jī)使用,1為可以供其他機(jī)器使用.
(2)客戶端設(shè)置
在Web應(yīng)用程序的Web.Config中, 我們需要修改 <configuration> / <system.web> 的<sessionState>節(jié)點(diǎn).如果沒(méi)有
沒(méi)有則添加(默認(rèn)使用的是InProc方式)
復(fù)制代碼 代碼如下:
<sessionState
mode="StateServer"
stateConnectionString="tcpip=服務(wù)器ip:42424"
cookieless="false"
timeout="60"/>
上面的參數(shù)我們可以根據(jù)需要修改.
五.使用SqlServer模式搭建Session服務(wù)器
(1)服務(wù)器端配置
使用SqlServer模式搭建Session服務(wù)器端有兩種方式. ASP.NET 1.0和1.1版本請(qǐng)使用方式a, 2.0即以上版本請(qǐng)使用方式b.
a.使用SQL文件創(chuàng)建Session數(shù)據(jù)庫(kù)
在ASP.NET 1.0和1.1 版本中, 只能使用這種方式.對(duì)于2.0及其以上版本,請(qǐng)使用ASPNET_regsql.exe工具.(當(dāng)然此方法也通用2.0版本)
.NET提供了數(shù)據(jù)庫(kù)安裝腳本,可以在機(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兩個(gè)版本,可以在不同的版本文件夾找到這兩個(gè)SQL.
InstallSqlState.sql 是創(chuàng)建默認(rèn)名稱的數(shù)據(jù)庫(kù)"[ASPState]".此SQL可以直接運(yùn)行.
InstallSqlStateTemplate.sql 可以使用自己指定的數(shù)據(jù)庫(kù)保存數(shù)據(jù).此SQL需要自己修改后運(yùn)行, 打開(kāi)SQL文件將其中 [DatabaseNamePlaceHolder] 替換為自己指定的數(shù)據(jù)庫(kù)名稱.
執(zhí)行installsqlstate.sql時(shí)不需要指定數(shù)據(jù)庫(kù),可以在任意數(shù)據(jù)庫(kù)上執(zhí)行.此SQL會(huì)自己創(chuàng)建新的數(shù)據(jù)庫(kù)
b. 使用ASPNET_regsql.exe工具
ASP.NET 2.0版本后微軟提供了ASPNET_regsql.exe工具可以方便的配置Session數(shù)據(jù)庫(kù).該工具位于 Web 服務(wù)器上的"系統(tǒng)根目錄/Microsoft.NET/Framework/版本號(hào)"文件夾中.
使用舉例:
ASPNET_regsql.exe -S . -U sa -P 123456 -ssadd -sstype p
-S參數(shù):
表示數(shù)據(jù)庫(kù)實(shí)例名稱. 可以用"."表示本機(jī).
-U和-P參數(shù):
表示用戶名和密碼.
-E參數(shù):
可以再-U
主站蜘蛛池模板:
欧美在线视频一区二区
|
久久亚洲一区二区
|
日本小视频网站
|
日韩影院在线
|
91精品麻豆日日躁夜夜躁
|
日韩视频区|
国产精品一区在线观看你懂的
|
欧美二区三区
|
欧美精品一区二区三区蜜桃视频
|
插插插干干干
|
成人免费网站视频
|
成人99
|
成人亚洲一区
|
五月天婷婷综合
|
欧美中文
|
免费毛片网
|
91日b|
中文字幕在线观看第一页
|
一区观看
|
欧美成年人视频在线观看
|
国产精品久久欧美久久一区
|
成人免费毛片片v
|
色综合一区二区
|
久久久久99
|
欧美不卡一区
|
成人免费视频观看视频
|
日韩视频一区二区三区
|
日韩一区二区在线视频
|
国产一级视频在线
|
欧美亚洲网站
|
久久一日本道色综合久久
|
成人三级视频
|
日韩三级电影在线看
|
黄色国产在线视频
|
免费黄色成人
|
国产偷录叫床高潮录音
|
精品福利av导航
|
国产精品久久久久久模特
|
中文字幕一区二区三区日韩精品
|
av大片|
黄色网址免费看
|