cookie和会话状态对象

时间:2011-03-29 18:38:15

标签: asp.net iis session cookies session-state

无论如何,我主要担心的是使用Session。我一直认为如果你使用以下陈述(不是我愿意):

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

您将创建3个具有特定值的新会话cookie。但我认为我的 asp book 表明你实际上会在会话状态对象中创建3个新变量,而ASP只传递一个唯一的会话ID (作为cookie?)在响应中,并在下一个请求时获取此ID并将该ID与您的会话状态对象(IIS已存储在内存中?)相关联:

  

...它创建一个会话状态对象   包含唯一的会话ID   每个用户的会话。此ID已通过   回到浏览器作为一部分   回应然后回到了   服务器与下一个请求。 ASP.NET   然后可以使用会话ID来获取   与之关联的会话状态对象   请求。

对于拥有大量流量的网站来说,这似乎并不理想。每个网站存储和维护成千上万个会话状态实例的服务器似乎过载过多 我正试图看看自己发生了什么,但我遇到了麻烦..我无法在我的机器上找到我网站的cookie(IE / windows xp)。我已经检查了C:\Documents and Settings\nicholasr\Cookies\C:\Documents and Settings\nicholasr\Local Settings\Temporary Internet Files,根据this yahoo answer,还存储了IE Cookie。我在我的应用程序中使用票证身份验证,它在客户端上存储了一个auth cookie,因此我网站上的cookie必须在某处... 我猜我在问:
1)如果有人可以帮助我了解会话状态如何在幕后工作
2)IE存储我网站的cookie在哪里? ><

1 个答案:

答案 0 :(得分:4)

有一个会话cookie代表一个GUID。会话值本身存储在服务器上。所以当你写:

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不会持久存在。