国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

.NET開發(fā)時(shí)讓人頭痛的SESSION超時(shí)

2019-11-17 02:06:41
字體:
供稿:網(wǎng)友

.NET開發(fā)時(shí)讓人頭痛的session超時(shí)

前言

不知道大家在使用用.NET的SESSION的時(shí)候有沒有遇到過很奇怪的問題,不時(shí)候不知道怎么回事,這個(gè)SESSION就無緣無故的丟失了 怎么也想不通,不是說SESSION很可靠的嗎?這個(gè)問題要好好的反思下,是不是我們在什么地方設(shè)置的時(shí)候就出問題,還是說 asp.net 的SEESION沒有想象中的可靠。

設(shè)置Session超時(shí)值

在web.conf配置文件下寫:

<system.web><sessionState mode="InPRoc" timeout="10"/></system.web>

sessionState有四種模式off,inProc,StateServer,SqlServer。

1、off模式

從字面上就可以看出這個(gè)是關(guān)閉模式,如果當(dāng)前頁面不需要session的值,為了減少服務(wù)器資源,你可以去掉Session的開銷。

或者頁面上

<%@ Page EnableSessionState="false" %>來關(guān)閉Session。

2、inProc模式(缺省模式)

它允許“無Cookie”的會(huì)話,以及在服務(wù)器之外存儲會(huì)話數(shù)據(jù)。ASP.NET會(huì)話狀態(tài)模塊在Web.config文件中像下面這樣配置:

在這個(gè)例子中,mode屬性設(shè)為InProc(默認(rèn)值),表明會(huì)話狀態(tài)要由ASP.NET存儲到內(nèi)存中,而且不用Cookie來傳遞會(huì)話ID。采取這種方式,不管Cookie還是隱藏表單字段都用不著了。所以,即使網(wǎng)頁中沒有使用表單,也能加入會(huì)話。 但是這種方法,應(yīng)用程序的狀態(tài)將依賴于 ASP.NET進(jìn)程, 當(dāng)IIS進(jìn)程崩潰或者正常重啟時(shí),保存在進(jìn)程中的狀態(tài)將丟失。

3、StateServer會(huì)話管理

將mode屬性設(shè)為StateServer,也就是將會(huì)話數(shù)據(jù)存儲到單獨(dú)的內(nèi)存緩沖區(qū)中,再由單獨(dú)一臺機(jī)器上運(yùn)行

的Windows服務(wù)來控制這個(gè)緩沖區(qū)。狀態(tài)服務(wù)全稱是“ASP.NET State Service ”(aspnet_state.exe),計(jì)算機(jī)管理-服務(wù) 里面即可看到此服務(wù),啟動(dòng)該服務(wù)

它由Web.config文件中的stateConnectionString屬性來配置。該屬性指定了服務(wù)所在的服務(wù)器,以及要監(jiān)視的端口:

在這個(gè)例子中,狀態(tài)服務(wù)在一臺名為myserver的機(jī)器的42424端口(默認(rèn)端口)運(yùn)行。要在服務(wù)器上改變端口,可編輯HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/aspnet_stat /Parameters 注冊表項(xiàng)中的Port值。

顯然,使用狀態(tài)服務(wù)的優(yōu)點(diǎn)在于進(jìn)程隔離,并可在Web farm(網(wǎng)站群)中共享。 使用這種模式,會(huì)話狀態(tài)的存儲將不依賴于iis進(jìn)程的失敗或者重啟,然而,一旦狀態(tài)服務(wù)中止,所有會(huì)話數(shù)據(jù)都會(huì)丟失。換言之,狀態(tài)服務(wù)不像SQL Server那樣能持久存儲數(shù)據(jù);它只是將數(shù)據(jù)存儲在內(nèi)存中。

4、 用SQL Server進(jìn)行會(huì)話管理

ASP.NET還允許將會(huì)話數(shù)據(jù)存儲到一個(gè)數(shù)據(jù)庫服務(wù)器中,方法是將mode屬性變成SqlServer。 在這種情況下,ASP.NET嘗試將會(huì)話數(shù)據(jù)存儲到由sqlConnectionString屬性(其中包含數(shù)據(jù)源以及登錄服務(wù)器所需的安全憑證)指定的SQL Server中。

為了用恰當(dāng)?shù)臄?shù)據(jù)庫對象來配置SQL erver,管理員還需要?jiǎng)?chuàng)建ASPState數(shù)據(jù)庫,方法是運(yùn)行

  • WinDir/Microsoft.Net/Framework/Version文件夾中的InstallSqlState.sql腳本(WinDir是服務(wù)器的Windows文件夾,而Version是你使用的.NET框架版本的安裝文件夾)。

要配置SQL服務(wù)器,可以在命令行中運(yùn)行SQL Server 提供的命令行工具 osql.exeosql -S [ server name] -U [user] -P [passWord] -i InstallSqlState.sql例如 osql -S (local)/NetSDK -U sa -P "" -i InstallSqlState.sql

在這里用戶名必須是SQL服務(wù)器上的sa帳號,或者具有同等權(quán)限的其他帳號。有興趣的讀者可以打開這個(gè)腳本文件來了解ASP.NET是如何和SQL Server配合實(shí)現(xiàn)狀態(tài)管理的。

卸載這些表和存儲過程,可以使用UninstallSqlState.sql腳本,使用方法與上面類似。做好必要的數(shù)據(jù)庫準(zhǔn)備工作后,將web.config 文件中的sessionstate 元素的mode改為"sqlserver",并且指定SQL連接字符串。具體如下:

mode="sqlserver"sqlConnectionString="data source=127.0.0.1; userid=sa; password="

配置好SQL Server后,應(yīng)用程序代碼運(yùn)行時(shí)就和InProc模式?jīng)]有什么區(qū)別。但要注意的是,由于數(shù)據(jù)不存儲在本地內(nèi)存,所以存儲會(huì)話狀態(tài)的對象需要進(jìn)行序列化和反序列化,以便通過網(wǎng)絡(luò)傳給數(shù)據(jù)庫服務(wù)器,以及從數(shù)據(jù)庫服務(wù)器傳回。這當(dāng)然會(huì)影響性能。通過在數(shù)據(jù)庫中存儲會(huì)話狀態(tài),可分別針對擴(kuò)展性及可靠性來有效地平衡性能。另外,可以利用SQL Server的集群,使?fàn)顟B(tài)存儲不依賴于單個(gè)的SQL Server, 這樣就可以為應(yīng)用程序提供極大限度的可靠性。


發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 海安县| 珠海市| 凉城县| 留坝县| 卓尼县| 扬州市| 洛扎县| 靖宇县| 临湘市| 象州县| 丁青县| 建水县| 珲春市| 商丘市| 浠水县| 兰西县| 河东区| 深水埗区| 奈曼旗| 萨嘎县| 修武县| 突泉县| 长垣县| 石嘴山市| 铅山县| 永康市| 梨树县| 凤山县| 吉木乃县| 奉化市| 礼泉县| 南开区| 中宁县| 理塘县| 桂阳县| 迁西县| 石家庄市| 博罗县| 酒泉市| 大同市| 芷江|