ASP.NET:为什么即使没有cookie也可以读取会话cookie?

时间:2015-07-28 10:52:52

标签: c# asp.net vb.net session cookies

我似乎可以随时阅读SessionID,即使目前还没有Cookie!

Dim SessionID As String = Request.Cookies("ASP.NET_SessionId").Value

此代码将始终返回一个值,可能是 IIS 服务器端所持有的ID。

只有在存储会话信息的请求发生时才会生成cookie。

为什么会这样?

和......

如果我正在使用会话状态服务器,SessionID是否会与cookie SessionID不同,如果其中一个ID丢失或重置,哪个优先?

修改

如果重置了app_pool。必须创建新的会话ID才会导致会话cookie更新吗?因为这可能会为已登录的用户带来潜在的冲突。

2 个答案:

答案 0 :(得分:0)

每次用户访问网站并打开会话时,ASP.Net默认会创建一个SessionID,除非您指定了cookieless选项:

如果您使用会话状态服务器,则所有Web服务器上的SessionID应该相同,否则您将无法找到相同的用户。

如果ID丢失或重置,状态服务器将只创建一个新的,并使用新的SessionID编写一个新的cookie,旧的将在到期时间后删除。

答案 1 :(得分:0)

当用户访问由 ASP.NET 提供支持的网站时,IIS会生成SessionID以唯一地识别用户会话。

如果网站使用cookies:

<sessionState mode="StateServer" cookieless="UseCookies"/>

仅当网页发出存储会话信息的请求时,才会生成名为ASP.NET_SessionId的cookie。如果没有存储会话信息,则不会创建cookie,但用户仍将拥有活动SessionID

如果没有Cookie,则会从 IIS 中读取SessionID

服务器上的SessionID始终优先,并且当在cookie中存储信息的新请求时将更新会话cookie。