2015-07-28 94 views
1

看来,我可以随时阅读SessionID,即使目前没有Cookie!ASP.NET:即使没有cookie,我为什么可以读取会话cookie?

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

此代码总是会返回一个值,大概是由举行的ID IIS服务器端。

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

这是为什么?

和...

如果我使用的会话状态服务器将SessionID曾经从cookie SessionID不同,其优先如果的ID的一个丢失或重置?

编辑

如果app_pool复位。必须创建新的会话ID才会导致会话cookie也被更新?由于这可能会给已经登录的用户的潜在冲突

+0

当会话cookie丢失(删除,到期)时,asp.net将生成另一个持有sessionId,以便在任何时候,您都有一致的方式来引用会话(“某事”)并获得预期行为。 – sarepta

回答

0

当用户访问由供电的网站ASP.NET IIS生成一个SessionID来唯一地标识用户会话。

如果网站使用cookie:

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

会当存储会话信息的请求是通过网页制作只生成一个名为ASP.NET_SessionId的cookie。如果没有会话信息存储,cookie将不会被创建,但用户仍然有一个活动的SessionID

SessionID读取IIS当没有cookie存在时。

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

0

,网站和会议在默认情况下打开ASP.Net的用户访问创建的SessionID每次除非您指定的cookie的选项:

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

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

+0

这不完全正确。你可以自己测试一下。当用户访问网站时会产生一个'SessionID',但是直到存储会话信息的请求被生成才会生成'cookie'。如果没有会话信息存储,则不会创建cookie,但用户仍然具有活动的sessionid。 – Obsidian