我了解Session对象用于存储每个会话的数据。我做了以下实验:


打开浏览器并访问aspx页面A,该页面将一些数据保存到Session对象。
保持浏览器打开并打开另一个选项卡,以访问显示会话数据的aspx页面B。它的显示与我在步骤1中存储的一样。
我关闭浏览器并重新访问页面B,存储的数据不见了。


从3开始,服务器端似乎以某种方式检测到我(客户端)已终止会话。但是,正如我与Fiddler所检查的那样,在步骤3中关闭浏览器时,没有位发送到服务器。

那么,ASP.NET应用程序如何知道我的第3步请求是针对新会话?

会话如何定义?不同的选项卡是否始终属于同一会话?

加1

尽管可以在页面A和页面B中显示会话数据,但是它们中显示的会话ID是不同的。为什么?

正确

页面A和页面B中的会话ID相同。我没有使用InPrivate浏览。

加2

确实有一个用于会话ID的Cookie:

ASP.NET_SessionId=lmswljirqdjxdfq3mvmbwroy; path=/; domain=localhost; HttpOnly


它是在响应POST请求时设置的。

因此,我做了另一个实验,我关闭了浏览器(Fire Fox),并且Cookie不再存在。我手动创建cookie,希望“伪造的Cookie可以恢复旧的会话”。但是Fiddler表示手动cookie根本没有发送。

提琴手说:

This request did not send any cookie data.


那么可以伪造一个cookie并恢复以前的会话吗?

会话在服务器上存活多长时间?

最佳答案

服务器启动新会话时,它将为该会话生成一个新的标识符。会话数据存储在会话提供程序中的此标识符/键下(可以在内存中,在SQL Server中或完全在其他地方,具体取决于您的配置-通常在web.config中进行配置)。

同时,服务器将cookie发送到您的浏览器(至少在默认设置中)。该cookie包含您的会话的标识符。这就是服务器将您的请求与特定会话相关联的方式:在每个请求中,浏览器将一起发送会话cookie。服务器从cookie中检索标识符,并使用该标识符查找您的会话数据。

会话cookie是非持久性的,这意味着在关闭浏览器时将删除cookie。这就是为什么looks like会话被删除的原因:会话数据仍然存在于服务器上,但是由于会话cookie已被删除,因此浏览器将不会发送会话cookie,因此服务器会将其视为会话cookie。新会话的开始,创建新会话标识符等。因此,服务器并不真正知道会话何时结束,而只是知道会话何时开始。这就是为什么在默认的SQL Server支持的设置中,计划的作业将清除不活动的会话-否则会话数据将永远留在数据库中。

有关会话的更多信息,请使用不带cookie的会话,会话配置,提供程序等,请参见MSDN

关于会话是否在浏览器选项卡之间共享:这实际上归结为cookie是否在选项卡之间共享。我认为cookie在所有主要浏览器中的选项卡之间都是共享的,如果不是这样,我会认为这很令人困惑,但是没有什么可以阻止某人创建浏览器而不在选项卡之间共享cookie的。

编辑1

如果删除会话cookie,则理论上可以通过重新创建cookie来重新创建会话。这本身不是安全问题,因为您正在重新创建已经可以访问的数据。但是,如果其他人要重新创建您的会话cookie,那将是一个安全问题。如果您想调查此问题,可以在Google中搜索“ ASP.NET会话劫持”。

编辑2

会话基本上驻留在服务器上,直到清除为止。因此,会话的生存期取决于您将其存储在何处。如果将其存储在内存中,则在回收应用程序时,该会话将被删除(可能是因为您在IIS中回收了该应用程序,或者是因为服务器已重新启动)。如果将其存储在SQL Server中,则会话数据将一直存在,直到作业删除它为止,因为已有一段时间没有访问它(对不起,我不记得详细信息,但是您可以用Google搜索它们)。如果将会话数据存储在Azure表存储中,则可能永远不会清除它们。

注意

通常会忽略ASP.NET会话状态的两个重要细节:


当会话存储在进程外部(例如,在SQL Server中)时,要存储的数据必须可序列化。
为了防止在访问会话数据时出现争用情况,将对访问会话的请求进行序列化,即,它们不会同时执行。


进一步的细节可以在the MSDN article "Underpinnings of the Session State Implementation in ASP.NET"中找到

关于asp.net - ASP.NET服务器如何知道 session 何时终止?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24782241/

10-12 12:37
查看更多