我了解 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 并恢复之前的会话?
会话在服务器上存在多长时间?