2011-03-29 55 views
0

無論如何,我主要關心的是使用Session。我一直的印象是,如果你使用下面的語句(不,我會):cookies和會話狀態對象

Session["newVar1"] = "a new session variable"; 
Session["newVar2"] = "a new session variable"; 
Session["newVar3"] = aLargeVariableThatHoldsLotsOfData; 

您將創建一個保存特定值3個新的會話cookie。但我認爲我的ASP書是表明你實際上在你的會話狀態對象創建3個新的變量和ASP只會在響應傳遞一個唯一會話ID(如餅乾嗎?),並且將獲得在這個ID下一個請求和準與您的會話狀態對象ID(IIS已存儲在內存中..?):

...它創建一個會話狀態對象 包含一個唯一的會話ID 每個用戶的會話。該ID被傳遞 回瀏覽器作爲 響應的一部分,然後返回到 服務器與下一個請求。 ASP.NET 然後可以使用會話ID獲取 會話狀態對象,該對象與請求關聯 。

似乎並不適合有大量的流量的網站。一個存儲和維護每個網站數千和數千個會話狀態實例的服務器似乎有太多過載。
我試圖自己看看發生了什麼,但是我遇到了麻煩..我無法在我的機器(IE/windows xp)上的任何位置找到我的網站Cookie。我已經檢查了C:\Documents and Settings\nicholasr\Cookies\C:\Documents and Settings\nicholasr\Local Settings\Temporary Internet Files,根據this yahoo answer,還存儲了IE cookie。我使用權證認證在我的應用程序存儲在客戶端上的身份驗證Cookie,所以從我的網站,一個cookie在某處..
我想我問:
1)如果有人能幫助我瞭解如何會話狀態在幕後工作
2)IE在哪裏存儲我的網站的Cookie? > <

回答

4

有其表示GUID單個會話cookie。會話值本身存儲在服務器上。所以當你寫:

Session["newVar1"] = "a new session variable"; 
Session["newVar2"] = "a new session variable"; 
Session["newVar3"] = aLargeVariableThatHoldsLotsOfData; 

一個HTTP cookie可能看起來像這樣發送到客戶端。這個cookie只包含一個id,而不是實際的值。實際值可以存儲在服務器內存,單獨的進程或SQL Server中,具體取決於web.config中的<sessionState mode=""。然後,當客戶端稍後發送另一個請求時,它會將此cookie ID發送給服務器,並給出id服務器將獲取實際值。

客戶端瀏覽器在內存中存儲這些Cookie,這意味着如果你關閉它,會話不會丟失,因爲會話cookie不是永久性的。

+0

Thx Darin。你知道我在哪裏可以找到這個餅乾嗎? windows xp/IE7 – 2011-03-29 18:44:04

+0

@Nicklamort,你找不到它。它在瀏覽器的內存中,並隨每個請求一起發送。從未儲存在任您可以在FireFox中使用像Fiddler或FireBug這樣的HTTP分析器來查看這個值是如何附加到每個請求的。 – 2011-03-29 18:45:34

+0

@Darin哦快點..我想它也是一樣的我的身份驗證cookie。非常感謝你!大大的幫助:) – 2011-03-29 18:47:19