日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

web.config 中SessionState的配置 [转]

發(fā)布時(shí)間:2024/4/15 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 web.config 中SessionState的配置 [转] 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一 http://hi.baidu.com/zyb512/blog/item/28ed858b3b88c015c9fc7af9.html
web Form 網(wǎng)頁(yè)是基于HTTP的,它們沒(méi)有狀態(tài), 這意味著它們不知道所有的請(qǐng)求是否來(lái)自
同一臺(tái)客戶端計(jì)算機(jī),網(wǎng)頁(yè)是受到了破壞,以及是否得到了刷新,這樣就可能造成信息的
丟失。 于是, 狀態(tài)管理就成了開(kāi)發(fā)網(wǎng)絡(luò)應(yīng)用程序的一個(gè)實(shí)實(shí)在在的問(wèn)題。
??? 在ASP中能夠通過(guò)Cookie 、查詢字符串、 應(yīng)用程序、會(huì)話(Session) 等輕易解決這些問(wèn)題。
現(xiàn)在在ASP.NET環(huán)境中,我們依然可以使用這些功能,并且功能更加強(qiáng)大。
狀態(tài)管理分為服務(wù)端和客戶端兩種情況, 這里只是介紹 服務(wù)端狀態(tài)管理:

?? 與Application對(duì)象不同的是, ASP.NET 的Session對(duì)象可以在IIS服務(wù)器或者工作進(jìn)程重新啟動(dòng)時(shí)
恢復(fù)啟動(dòng)前的狀態(tài)而不丟失其中的數(shù)據(jù)。這是因?yàn)榇鎯?chǔ)在Session中的所以信息都缺省的存儲(chǔ)在
一個(gè)作為Windows服務(wù)運(yùn)行的狀態(tài)服務(wù)器進(jìn)程中。狀態(tài)可以被序列化并以二進(jìn)制形式保存在內(nèi)存中。
程序員可以懸著使用Microsoft Sql server數(shù)據(jù)庫(kù)來(lái)存儲(chǔ)數(shù)據(jù)。

狀態(tài)服務(wù)器服務(wù)和狀態(tài)信息可以和web應(yīng)用程序一起存在于同一臺(tái)服務(wù)器上,也可以保存到外部的
狀態(tài)服務(wù)器上。 為了指定如何存儲(chǔ)信息,程序員可以在web.config文件中編寫(xiě)適當(dāng)?shù)呐渲谩?/p>

ASP.NET會(huì)話狀態(tài)模塊在Web.config文件中<System.web>標(biāo)記下的<Sessionstate>標(biāo)記的mode屬性來(lái)決定
該屬性的四種可能的值: Off、 Inproc StateServer 和SQLserver。
1 Inproc是缺省的設(shè)置
它允許“無(wú)Cookie”的會(huì)話,以及在服務(wù)器之外存儲(chǔ)
會(huì)話數(shù)據(jù)。ASP.NET會(huì)話狀態(tài)模塊在Web.config文件中像下面這樣配置:

<sessionState mode="InProc" cookieless="false" timeout="20" />

在這個(gè)例子中,mode屬性設(shè)為InProc(默認(rèn)值),表明會(huì)話狀態(tài)要由ASP.NET存儲(chǔ)到內(nèi)存中,而且
不用Cookie來(lái)傳遞會(huì)話ID。相反,會(huì)話ID要直接插入一個(gè)網(wǎng)頁(yè)URL的查詢字符串中。例如,采用
InProc模式并建立一個(gè)會(huì)話之后,調(diào)用一個(gè)假想的ASP.NET網(wǎng)頁(yè)時(shí),需要采用下面這樣的URL:

http://my.website.com/(12mfju55vgblubjlwsi4dgjq)/education.aspx

圓括號(hào)中長(zhǎng)長(zhǎng)的字母、數(shù)字字符串就是會(huì)話ID。ASP.NET引擎從查詢字符中提取會(huì)話ID,并將用戶
請(qǐng)求與特定會(huì)話聯(lián)系起來(lái)。采取這種方式,不管Cookie還是隱藏表單字段都用不著了。
所以,即使網(wǎng)頁(yè)中沒(méi)有使用表單,也能加入會(huì)話。

但是這種方法,應(yīng)用程序的狀態(tài)將依賴于 ASP.NET進(jìn)程, 當(dāng)IIS進(jìn)程崩潰或者正常重啟時(shí),保存在
進(jìn)程中的狀態(tài)將丟失。

2 mode屬性設(shè)為Off
?? 和從前的ASP一樣,ASP.NET的會(huì)話狀態(tài)管理是要產(chǎn)生開(kāi)銷的。所以,假如某個(gè)網(wǎng)頁(yè)不需要訪問(wèn)
Session對(duì)象,開(kāi)發(fā)者應(yīng)將那個(gè)頁(yè)的Page預(yù)編譯指令的EnableSessionState屬性設(shè)為False。
要為整個(gè)網(wǎng)站禁用會(huì)話狀態(tài),可在Web.config文件中將sessionState元素的mode屬性設(shè)為Off。

?? 為了克服inproc 模式的缺點(diǎn), ASP.NET 提供了兩種進(jìn)程外保存會(huì)話狀態(tài)的方法。

3 StateServer會(huì)話管理

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

的Windows服務(wù)來(lái)控制這個(gè)緩沖區(qū)。狀態(tài)服務(wù)全稱是“ASP.NET State Service ”(aspnet_state.exe),

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

視的端口:
<sessionState mode="StateServer"
??? stateConnectionString="tcpip=myserver:42424"
??? cookieless="false" timeout="20" />
在這個(gè)例子中,狀態(tài)服務(wù)在一臺(tái)名為myserver的機(jī)器的42424端口(默認(rèn)端口)運(yùn)行。要在服務(wù)器上改變

端口,可編輯HKLM\SYSTEM\CurrentControlSet\Services\aspnet_state注冊(cè)表項(xiàng)中的Port值。
顯然,使用狀態(tài)服務(wù)的優(yōu)點(diǎn)在于進(jìn)程隔離,并可在Web farm中共享。 使用這種模式,會(huì)話狀態(tài)的存儲(chǔ)將不

依賴于iis進(jìn)程的失敗或者重啟,然而,一旦狀態(tài)服務(wù)中止,所有會(huì)話數(shù)據(jù)都會(huì)丟失。換言之,狀態(tài)服務(wù)不

像SQL Server那樣能持久存儲(chǔ)數(shù)據(jù);它只是將數(shù)據(jù)存儲(chǔ)在內(nèi)存中。

4 用SQL Server進(jìn)行會(huì)話管理
?? ASP.NET還允許將會(huì)話數(shù)據(jù)存儲(chǔ)到一個(gè)數(shù)據(jù)庫(kù)服務(wù)器中,方法是將mode屬性變成SqlServer。
在這種情況下,ASP.NET嘗試將會(huì)話數(shù)據(jù)存儲(chǔ)到由sqlConnectionString屬性(其中包含數(shù)據(jù)源以及登錄服

務(wù)器所需的安全憑證)指定的SQL Server中。
為了用恰當(dāng)?shù)臄?shù)據(jù)庫(kù)對(duì)象來(lái)配置SQL erver,管理員還需要?jiǎng)?chuàng)建ASPState數(shù)據(jù)庫(kù),
方法是運(yùn)行WinDir\Microsoft.Net\Framework\Version文件夾中的InstallState.sql腳本(WinDir是服務(wù)

器的Windows文件夾,而Version是你使用的.NET框架版本的安裝文件夾)。
要配置SQL服務(wù)器,可以在命令行中運(yùn)行SQL Server 提供的命令行工具osql.exe

osql -S [ server name] -U [user] -P [password] <InstallSqlState.sql
例如
osql -S (local)\NetSDK -U sa -P "" -i InstallSqlState.sql

在這里用戶名必須是SQL服務(wù)器上的sa帳號(hào),或者具有同等權(quán)限的其他帳號(hào)。有興趣的讀者可以打開(kāi)
這個(gè)腳本文件來(lái)了解ASP.NET是如何和SQL Server配合實(shí)現(xiàn)狀態(tài)管理的。
?? 卸載這些表和存儲(chǔ)過(guò)程,可以使用UninstallSqlState.sql腳本,使用方法與上面類似。

做好必要的數(shù)據(jù)庫(kù)準(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ù)不存

儲(chǔ)在本地內(nèi)存,所以存儲(chǔ)會(huì)話狀態(tài)的對(duì)象需要進(jìn)行序列化和反序列化,以便通過(guò)網(wǎng)絡(luò)傳給數(shù)據(jù)庫(kù)服務(wù)器,

以及從數(shù)據(jù)庫(kù)服務(wù)器傳回。這當(dāng)然會(huì)影響性能。通過(guò)在數(shù)據(jù)庫(kù)中存儲(chǔ)會(huì)話狀態(tài),可分別針對(duì)擴(kuò)展性及可靠

性來(lái)有效地平衡性能。另外,可以利用SQL Server的集群,使?fàn)顟B(tài)存儲(chǔ)不依賴于單個(gè)的SQL Server,
這樣就可以為應(yīng)用程序提供極大限度的可靠性。


二 http://blog.csdn.net/beer888/archive/2007/11/10/1878349.aspx

關(guān)于c# 刪除文件夾時(shí)SESSION丟失問(wèn)題解決辦法

1、在WEB.CONFIG文件中修改SESSION狀態(tài)保存模式,如:<sessionState mode='StateServer' cookieless='false' timeout='20'/>

2、啟動(dòng)系統(tǒng)服務(wù)“ASP.NET狀態(tài)服務(wù) ”,系統(tǒng)默認(rèn)是手動(dòng)啟動(dòng)的

3、如果SESSION中保存的數(shù)據(jù)類型是自定義的,如結(jié)構(gòu),請(qǐng)?jiān)谧远x數(shù)據(jù)類型處序列化會(huì)話狀態(tài),即在類或結(jié)構(gòu)申明前加[Serializable]

完成以上3部,狀態(tài)即可保存,但是在訪問(wèn)頁(yè)面是瀏覽器顯示的路徑中增加了一段字符,如:(S(lto3j0eg25cztmqtxevm5tb4))

三web.config1 http://blog.sina.com.cn/s/blog_4933eca3010009pb.html

四web.config2 http://www.leadbbs.com/MINI/Default.asp?205-2524231-0-0-0-0-0-a-.htm

總結(jié)

以上是生活随笔為你收集整理的web.config 中SessionState的配置 [转]的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。