小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

cookie,session,cache介紹和asp.net中設(shè)置網(wǎng)站Session過(guò)期的...

 suweixin 2011-01-19
 cookie,session,cache介紹和asp.net中設(shè)置網(wǎng)站Session過(guò)期的方法
2011-01-18 22:58
轉(zhuǎn)載自 saybar
最終編輯 saybar

一、中文譯名

Ø         Cookie小餅干? 偶用盡所有的方法都沒(méi)有找到其中文譯名, 就連偶一直非常信任的金山詞霸對(duì)其也只是一段解釋而非譯名。(如果哪位高人能譯出,請(qǐng)一定要告知金山公司讓他們?nèi)ジ略~庫(kù))

Ø         Session:會(huì)話

Ø         Cache:高速緩沖存儲(chǔ)器

 

二、工作機(jī)制

Ø         Cookie:采用的是客戶端保存信息的方案。

Ø         Session:采用服務(wù)器端保存信息的方案。

Ø         Cache:利用緩存SRAM來(lái)“靜態(tài)”的保存寫入信息的方案。

如果上面的“專業(yè)”解釋你還是不能明白,那我們就來(lái)“通俗”的解釋它們吧!

 

         1Cookie客戶端的機(jī)制就是用戶訪問(wèn)站點(diǎn)時(shí),Web服務(wù)器發(fā)送給該用戶的不僅僅是一個(gè)頁(yè)面,還有一個(gè)包含日期和時(shí)間的Cookie。用戶的瀏覽器在獲得頁(yè)面的同時(shí)還得到了這個(gè)Cookie,并且將它保存在用戶硬盤上的某個(gè)文件夾中。

Cookie是一段文本信息,你可以在你的電腦硬盤中找到許多這種文件,它們通常存放在C:\Documents and Settings\用戶名\Cookies(早于Win2000以前的系統(tǒng)則會(huì)存放在c:\windows\Cookies)。

那么Web服務(wù)器通過(guò)Cookie究竟寫下了些什么呢?它們用有什么作用呢?

這些就要看Web服務(wù)器的code如何寫的了,不過(guò)你可以不必?fù)?dān)心,服務(wù)器在Cookie里寫下的信息只是為了你下次訪問(wèn)該站點(diǎn)時(shí)節(jié)約時(shí)間或提供一些特定的服務(wù)(絕非病毒或是其它可疑滴東東)。而且某些信息數(shù)據(jù)是加密的(例如密碼等),當(dāng)然也可以通過(guò)設(shè)置瀏覽器讓它不記錄下Cookie。

應(yīng)用舉例:一些要求用戶登錄的站點(diǎn)則可以通過(guò)Cookie來(lái)確定您是否已經(jīng)登錄過(guò),這樣您就不必每次都輸入登錄信息;一些站點(diǎn)的投票功能可以簡(jiǎn)單地利用Cookie作為布爾值,表示您的瀏覽器是否已經(jīng)參與了投票,從而避免您重復(fù)投票。

 

2Session服務(wù)端的機(jī)制是將用戶的請(qǐng)求信息放在服務(wù)器端來(lái)保存信息,服務(wù)器使用一種類似于散列表的結(jié)構(gòu)來(lái)保存信息。當(dāng)程序需要為某個(gè)客戶端的請(qǐng)求創(chuàng)建一個(gè)session的時(shí)候,服務(wù)器首先檢查這個(gè)客戶端的請(qǐng)求里是否已包含了一個(gè)session標(biāo)識(shí) - 稱為session id,如果已包含一個(gè)session id則說(shuō)明以前已經(jīng)為此客戶端創(chuàng)建過(guò)session,服務(wù)器就按照session id把這個(gè)session檢索出來(lái)使用。

保存這個(gè)session id的方式可以采用cookie,這樣在交互過(guò)程中瀏覽器可以自動(dòng)的按照規(guī)則把這個(gè)標(biāo)識(shí)發(fā)送給服務(wù)器。由于cookie可以被人為的禁止,必須有其他機(jī)制以便在cookie被禁止時(shí)仍然能夠把session id傳遞回服務(wù)器。經(jīng)常被使用的一種技術(shù)叫做URL重寫,就是把session id直接附加在URL路徑的后面。

這就好像是我們?nèi)ツ承┥痰耆ベI東西,如果你已是該店的會(huì)員,那么商店會(huì)給你一張會(huì)員卡,下次你再次光顧這家店時(shí)只要出示你的會(huì)員卡就可以享受訂制的服務(wù)了。

由于session只認(rèn)id不認(rèn)人,因此不同的瀏覽器,不同的窗口打開方式以及不同的cookie存儲(chǔ)方式都會(huì)對(duì)它的識(shí)別產(chǎn)生影響,這時(shí)就容易出現(xiàn)了我們常說(shuō)的session混亂了。

還是以上面會(huì)員店為例,如忘帶會(huì)員卡或是會(huì)員卡上的照片已經(jīng)是你好幾年前的樣子店員無(wú)法辨認(rèn),商店會(huì)重新給你辦理一張會(huì)員卡。而此時(shí)其實(shí)你已經(jīng)有兩張會(huì)員卡了(session id)正好這兩張卡的服務(wù)范圍不一樣(一張是普通卡,一張是VIP卡),當(dāng)你再次去商店你任意的給了商店一張卡,這樣你得到的服務(wù)有可能根本不是你想要的。

當(dāng)然如果程序?qū)懙暮檬强梢员苊膺@種混亂的情況,有時(shí)還可以是跨應(yīng)用程序的session共享。

 

3Cache“靜態(tài)”機(jī)制跟比起以上兩種方式就特殊一些。為什么說(shuō)它是“靜態(tài)”,是因?yàn)樗怯谐绦驅(qū)懭氲?/span>SRAM里的,除非是重新寫入數(shù)據(jù)或關(guān)閉電源,否則寫入的數(shù)據(jù)是會(huì)保持不變的。

由于CPU的存取數(shù)據(jù)速度比從內(nèi)存和硬盤中存取數(shù)據(jù)的速度要快得多,從內(nèi)存和硬盤中存取數(shù)據(jù)時(shí)會(huì)使CPU等待,影響計(jì)算機(jī)的速度。SRAM的存取速度比其它內(nèi)存和硬盤都要快,所以它被用作電腦的高速緩存。

有了高速緩存,可以先把數(shù)據(jù)預(yù)寫到其中,需要時(shí)直接從它讀出,這就縮短了CPU的等待時(shí)間。高速緩存之所以能提高系統(tǒng)的速度是基于一種統(tǒng)計(jì)規(guī)律,主板上的控制系統(tǒng)會(huì)自動(dòng)統(tǒng)計(jì)內(nèi)存中哪些數(shù)據(jù)會(huì)被頻繁的使用,就把這些數(shù)據(jù)存在高速緩存中,CPU要訪問(wèn)這些數(shù)據(jù)時(shí),就會(huì)先到Cache中去找,從而提高整體的運(yùn)行速度。

 

三、生命周期區(qū)別

Ø         Cookie

如果不設(shè)置過(guò)期時(shí)間,則表示這個(gè)cookie生命周期為瀏覽器會(huì)話期間,只要關(guān)閉瀏覽器窗口,cookie就消失了。這種生命期為瀏覽會(huì)話期的cookie被稱為會(huì)話cookie。會(huì)話cookie一般不保存在硬盤上而是保存在內(nèi)存里。
  如果設(shè)置了過(guò)期時(shí)間,瀏覽器就會(huì)把cookie保存到硬盤上,關(guān)閉后再次打開瀏覽器,這些cookie依然有效直到超過(guò)設(shè)定的過(guò)期時(shí)間。有些論壇在你登錄時(shí)有記住登錄信息1個(gè)月這類的時(shí)間選擇,這就是為Cookie設(shè)置了過(guò)期時(shí)間。這時(shí)我們就算關(guān)閉了瀏覽器,再次打開訪問(wèn)這個(gè)論壇時(shí)仍然會(huì)是在線狀態(tài)不需要再次登錄。

Ø         Session

Cookie不一樣,用戶關(guān)閉瀏覽器Session仍然保存在服務(wù)器端,只要程序發(fā)出指令去刪除session,服務(wù)器會(huì)一直保留這個(gè)會(huì)話對(duì)象直到它處于非活動(dòng)狀態(tài)超過(guò)設(shè)定的間隔為止。

我們有時(shí)會(huì)誤解當(dāng)用戶關(guān)閉瀏覽器時(shí)Session已經(jīng)被刪除,是由于大部分session機(jī)制都使用cookie來(lái)保存session id,而關(guān)閉瀏覽器后這個(gè)session id就消失了,再次連接到服務(wù)器時(shí)也就無(wú)法找到原來(lái)的session。

Ø         Cache

由于Cache的機(jī)制我們很明顯的可以看出,只有關(guān)閉電腦電源或是讓程序重寫Cache。不然這個(gè)Cache將會(huì)一直存在。

 

.NET Framework 常規(guī)參考
sessionState 元素(ASP.NET 設(shè)置架構(gòu))

為當(dāng)前應(yīng)用程序配置會(huì)話狀態(tài)設(shè)置。

configuration 元素(常規(guī)設(shè)置架構(gòu))
  system.web 元素(ASP.NET 設(shè)置架構(gòu))
    sessionState 元素(ASP.NET 設(shè)置架構(gòu))
<sessionState mode="[Off|InProc|StateServer|SQLServer|Custom]" timeout="number of minutes" cookieName="session identifier cookie name" cookieless= "[true|false|AutoDetect|UseCookies|UseUri|UseDeviceProfile]" regenerateExpiredSessionId="[True|False]" sqlConnectionString="sql connection string" sqlCommandTimeout="number of seconds" allowCustomSqlDatabase="[True|False]" useHostingIdentity="[True|False]" stateConnectionString="tcpip=server:port" stateNetworkTimeout="number of seconds" customProvider="custom provider name"> <providers>...</providers> </sessionState>
屬性和元素

下面幾部分描述了屬性、子元素和父元素。

屬性

allowCustomSqlDatabase

可選的 Boolean 屬性。

指定會(huì)話狀態(tài) SQL 數(shù)據(jù)庫(kù)是否可以是自定義數(shù)據(jù)庫(kù)(而不是 ASP.NET 默認(rèn)數(shù)據(jù)庫(kù))。如果為 false,則不能指定初始目錄或數(shù)據(jù)庫(kù)作為 sqlConnectionString 屬性的值。默認(rèn)會(huì)話狀態(tài) SQL 數(shù)據(jù)庫(kù)為 ASPState 數(shù)據(jù)庫(kù)。有關(guān)更多信息,請(qǐng)參見(jiàn)會(huì)話狀態(tài)模式。

此屬性是 .NET Framework 2.0 版中的新屬性。

默認(rèn)值為 false。

cookieless

可選的 HttpCookieMode 屬性。

指定對(duì)于 Web 應(yīng)用程序使用 Cookie 的方式。

cookieless 屬性可以為下列可能值之一。默認(rèn)值為 UseCookies。

AutoDetect

ASP.NET 確定請(qǐng)求瀏覽器或請(qǐng)求設(shè)備是否支持 Cookie。如果請(qǐng)求瀏覽器或請(qǐng)求設(shè)備支持 Cookie,則 AutoDetect 使用 Cookie 來(lái)保留用戶數(shù)據(jù);否則,將在查詢字符串中使用一個(gè)標(biāo)識(shí)符。如果瀏覽器或設(shè)備支持 Cookie,但當(dāng)前禁用了 Cookie,則請(qǐng)求功能仍會(huì)使用 Cookie。

UseCookies

無(wú)論瀏覽器或設(shè)備是否支持 Cookie,都使用 Cookie 來(lái)保留用戶數(shù)據(jù)。

UseDeviceProfile

ASP.NET 根據(jù) HttpBrowserCapabilities 設(shè)置來(lái)確定是否使用 Cookie。如果 HttpBrowserCapabilities 設(shè)置指示瀏覽器或設(shè)備支持 Cookie,將使用 Cookie;否則,將在查詢字符串中使用一個(gè)標(biāo)識(shí)符。

UseUri

無(wú)論瀏覽器或設(shè)備是否支持 Cookie,調(diào)用功能都使用查詢字符串來(lái)存儲(chǔ)標(biāo)識(shí)符。

cookieName

可選的 String 屬性。

指定存儲(chǔ)會(huì)話標(biāo)識(shí)符的 Cookie 的名稱。

此屬性是 .NET Framework 2.0 版中的新屬性。

默認(rèn)值為 "ASP.NET_SessionId"。

customProvider

可選的 String 屬性。

指定用于存儲(chǔ)和檢索會(huì)話狀態(tài)數(shù)據(jù)的自定義會(huì)話狀態(tài)提供程序的名稱。該提供程序在 providers 元素中指定。僅當(dāng)會(huì)話狀態(tài)模式設(shè)置為 Custom 值時(shí),才使用該提供程序。有關(guān)更多信息,請(qǐng)參見(jiàn)會(huì)話狀態(tài)模式。

此屬性是 .NET Framework 2.0 版中的新屬性。

默認(rèn)值為空字符串 ("")。

mode

可選的 SessionStateMode 屬性。

指定存儲(chǔ)會(huì)話狀態(tài)值的位置。有關(guān)更多信息,請(qǐng)參見(jiàn)會(huì)話狀態(tài)模式。

mode 屬性可以為下列可能值之一。默認(rèn)值為 InProc。

Custom

會(huì)話狀態(tài)將使用自定義數(shù)據(jù)存儲(chǔ)區(qū)來(lái)存儲(chǔ)會(huì)話狀態(tài)信息。

InProc

會(huì)話處于正在處理 ASP.NET 輔助進(jìn)程的狀態(tài)。

Off

會(huì)話狀態(tài)被禁用。

SQLServer

會(huì)話狀態(tài)將使用進(jìn)程外 SQL Server 數(shù)據(jù)庫(kù)來(lái)存儲(chǔ)狀態(tài)信息。

StateServer

會(huì)話狀態(tài)將使用進(jìn)程外 ASP.NET 狀態(tài)服務(wù)來(lái)存儲(chǔ)狀態(tài)信息。

partitionResolverType

可選的 String 屬性。

指定在哪里存儲(chǔ)會(huì)話狀態(tài)。如果 partitionResolverType 屬性中指定了值,則忽略 sqlConnectionStringstateConnectionString 屬性。PartitionResolverType 屬性返回的連接字符串將用于每個(gè)請(qǐng)求,為請(qǐng)求的其余部分連接到適當(dāng)?shù)姆?wù)器位置。如果連接字符串無(wú)效,ASP.NET 將引發(fā)一個(gè)異常,該異常與當(dāng)配置的服務(wù)器連接字符串無(wú)效時(shí)引發(fā)的異常相同。該屬性用于在 SQL 或狀態(tài)服務(wù)器模式下在多個(gè)后端節(jié)點(diǎn)上劃分會(huì)話狀態(tài)數(shù)據(jù)。

此屬性是 .NET Framework 2.0 版中的新屬性。

默認(rèn)值為空字符串。

regenerateExpiredSessionId

可選的 Boolean 屬性。

指定當(dāng)客戶端指定了過(guò)期的會(huì)話 ID 時(shí)是否重新發(fā)出會(huì)話 ID。默認(rèn)情況下,當(dāng)啟用了 regenerateExpiredSessionId 時(shí),僅為 cookieless 模式重新發(fā)出會(huì)話 ID。有關(guān)更多信息,請(qǐng)參見(jiàn) IsCookieless。

此屬性是 .NET Framework 2.0 版中的新屬性。

默認(rèn)值為 true。

sqlCommandTimeout

可選的 TimeSpan 屬性。

指定使用 SQL Server 會(huì)話狀態(tài)模式的 SQL 命令的持續(xù)時(shí)間超時(shí)(秒)。持續(xù)時(shí)間超時(shí)是 SQL 命令可以處于空閑狀態(tài)的時(shí)間(秒),超過(guò)此時(shí)間之后,該命令將被取消。

此屬性是 .NET Framework 2.0 版中的新屬性。

默認(rèn)值為 0:00:30(30 秒)。

sqlConnectionString

可選的 String 屬性。

為運(yùn)行 SQL Server 的計(jì)算機(jī)指定連接字符串。該屬性在 mode 屬性設(shè)置為 SQLServer 值時(shí)是必需的。有關(guān)更多信息,請(qǐng)參見(jiàn)會(huì)話狀態(tài)模式。

若要在使用 SQLServer 模式時(shí)提高您的應(yīng)用程序的安全性,請(qǐng)使用受保護(hù)的配置來(lái)加密配置的 sessionState 節(jié),以幫助保護(hù) sqlConnectionString 值。

默認(rèn)值為 "data source=127.0.0.1;Integrated Security=SSPI"

stateConnectionString

可選的 String 屬性。

指定遠(yuǎn)程存儲(chǔ)會(huì)話狀態(tài)的服務(wù)器名稱或地址以及端口。端口值必須為 42424。當(dāng) modeStateServer 值時(shí),該屬性是必需的。確保運(yùn)行 ASP.NET 狀態(tài)服務(wù)的服務(wù)器是存儲(chǔ)會(huì)話狀態(tài)信息的遠(yuǎn)程服務(wù)器。該服務(wù)隨 ASP.NET 一起安裝,默認(rèn)情況下為 %SystemRoot%\Microsoft.NET\Framework\VersionNumber\aspnet_state.exe。有關(guān)更多信息,請(qǐng)參見(jiàn)會(huì)話狀態(tài)模式。

若要在使用 StateServer 模式時(shí)提高您的應(yīng)用程序的安全性,請(qǐng)使用受保護(hù)的配置來(lái)加密配置的 <sessionState> 節(jié),以幫助保護(hù) stateConnectionString 值。

默認(rèn)值為 "tcpip=127.0.0.1:42424"

stateNetworkTimeout

可選的 TimeSpan 屬性。

指定 Web 服務(wù)器與狀態(tài)服務(wù)器之間的 TCP/IP 網(wǎng)絡(luò)連接可以處于空閑狀態(tài)的時(shí)間(秒),超過(guò)此時(shí)間后,請(qǐng)求將被取消。該屬性在 mode 屬性設(shè)置為 StateServer 值時(shí)使用。

默認(rèn)值為 10 秒。

timeout

可選的 TimeSpan 屬性。

指定在放棄一個(gè)會(huì)話前該會(huì)話可以處于空閑狀態(tài)的分鐘數(shù)。對(duì)于進(jìn)程內(nèi)和狀態(tài)服務(wù)器模式,timeout 屬性不能設(shè)置為大于 525,601 分鐘(1 年)的值。

會(huì)話 timeout 配置設(shè)置僅適用于 ASP.NET 頁(yè)。更改會(huì)話 timeout 值不會(huì)影響 ASP 頁(yè)的會(huì)話超時(shí)時(shí)間。同樣,更改 ASP 頁(yè)的會(huì)話超時(shí)時(shí)間不會(huì)影響 ASP.NET 頁(yè)的會(huì)話超時(shí)時(shí)間。

默認(rèn)值為 20 分鐘。

useHostingIdentity

可選的 Boolean 屬性。

指定會(huì)話狀態(tài)將恢復(fù)為宿主標(biāo)識(shí)還是使用客戶端模擬。

如果為 true,ASP.NET 將使用下列進(jìn)程憑據(jù)之一來(lái)連接會(huì)話狀態(tài)存儲(chǔ)區(qū):

宿主進(jìn)程;對(duì)于 Microsoft Internet 信息服務(wù) [IIS] 5 和 5.1 版為 ASPNET,對(duì)于 Microsoft Windows Server 2003 則為 NETWORK SERVICE。

如果為 false,ASP.NET 將使用目前與當(dāng)前請(qǐng)求的操作系統(tǒng)線程關(guān)聯(lián)的憑據(jù)來(lái)連接會(huì)話狀態(tài)存儲(chǔ)區(qū)。對(duì)于客戶端模擬,ASP.NET 將使用與瀏覽器協(xié)商的安全憑據(jù)來(lái)連接會(huì)話狀態(tài)存儲(chǔ)區(qū)。如果為 false,ASP.NET 在連接會(huì)話狀態(tài)存儲(chǔ)區(qū)時(shí)不會(huì)恢復(fù)為進(jìn)程標(biāo)識(shí)或應(yīng)用程序模擬標(biāo)識(shí)。有關(guān)更多信息,請(qǐng)參見(jiàn) ASP.NET 模擬。

此屬性是 .NET Framework 2.0 版中的新屬性。

默認(rèn)值為 true。

在 .NET Framework 1.1 版中,如果 mode 屬性設(shè)置為 SQLServer,并且客戶端模擬有效,則 ASP.NET 使用來(lái)自 ASP.NET 客戶端模擬的客戶端憑據(jù)連接到運(yùn)行 SQL Server 的計(jì)算機(jī)。

繼承的屬性

可選的屬性。

由所有節(jié)元素繼承的屬性。

子元素

providers

包含自定義會(huì)話狀態(tài)存儲(chǔ)區(qū)提供程序的集合。

父元素

configuration

公共語(yǔ)言運(yùn)行庫(kù)和基于 .NET Framework 的應(yīng)用程序所使用的每個(gè)配置文件中均需要的根元素。

system.web

指定配置文件中 ASP.NET 配置設(shè)置的根元素,并包含用于配置 ASP.NET Web 應(yīng)用程序和控制應(yīng)用程序行為方式的配置元素。

備注

sessionState 元素配置當(dāng)前應(yīng)用程序的會(huì)話狀態(tài)設(shè)置。

新客戶端在開始與 Web 應(yīng)用程序交互時(shí),會(huì)發(fā)出一個(gè)會(huì)話 ID,并且該 ID 將與會(huì)話有效期間從同一客戶端發(fā)出的所有后續(xù)請(qǐng)求關(guān)聯(lián)。此 ID 用于在不同的請(qǐng)求中保持與客戶端會(huì)話關(guān)聯(lián)的服務(wù)器端狀態(tài)。sessionState 元素控制 ASP.NET 應(yīng)用程序如何為每個(gè)客戶端建立并保持這種關(guān)聯(lián)。

這種機(jī)制非常靈活,可以為您提供許多功能,其中包括承載進(jìn)程外的會(huì)話狀態(tài)信息,以及在不使用 Cookie 的情況下跟蹤狀態(tài)。

在 URI 中發(fā)送會(huì)話 ID 時(shí),可以超過(guò) URI 的最大大小。如果匿名標(biāo)識(shí)票證、Forms 身份驗(yàn)證票證、會(huì)話 ID 和用戶數(shù)據(jù)的組合超過(guò)了允許的最大 URI 長(zhǎng)度,請(qǐng)求將失敗,并發(fā)出“400 錯(cuò)誤的請(qǐng)求”錯(cuò)誤。

使用 StateServer 模式

在將要存儲(chǔ)會(huì)話狀態(tài)信息的遠(yuǎn)程服務(wù)器上,確保 ASP.NET 狀態(tài)服務(wù)正在運(yùn)行。

使用 SQLServer 模式

在運(yùn)行將要存儲(chǔ)會(huì)話狀態(tài)的 SQL Server 的計(jì)算機(jī)上運(yùn)行 InstallSqlState.sql。


    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多