【发布时间】:2013-04-16 23:05:00
【问题描述】:
在玩global.asax.cs 文件时,我在里面附上了一些代码
protected void Session_Start(object sender, EventArgs e)
{
}
然后开始注意到在使用 chrome 时,每个请求都会调用Session_Start。使用 firefox 时,情况并非如此,它只被调用一次。这可能是什么原因造成的?
请注意,这仅在我的开发机器上。我编译并运行代码,打开 Firefox,浏览到 http://localhost:63893/,它点击了 Session_Start。在 Firefox 中浏览时,它只会点击一次 Session_Start。
当我打开 chrome 并浏览到 http://localhost:63893/ 时,它会点击 Session_Start。然后我输入我的登录数据并点击登录,它再次点击Session_Start,然后在加载下一页的获取请求时再次点击Session_Start 另一个。我使用计数器查看,实际上在此期间创建了 3 个不同的会话。
我知道有一些消息来源表明,当没有值存储在会话中时,会话被放弃。这对我来说是一个很好的解释,但事实并非如此。我用两种方法反驳了这一点。
方法一:
protected void Session_End(){} /*breakpoint*/
从未解雇,我可以确认旧会话仍然存在。
方法二:
在Session_Start 内部使用Session["KeepAlive"] = true; 来查看这是否会阻止_Start 被调用,但它没有。 _End 仍未被调用。
两者之间有什么不同或我做错了什么?
【问题讨论】:
-
会话与浏览器上的cookie直接连接。如果出于任何原因,任何调用,都没有找到 cookie 是 make new session。 cookie 还与主机名相关联。您可以将其设置为一个名称,并尝试从其他名称中读取它。真正找到发生了什么的唯一方法是打开 chrome 上的工具,查看所有加载的文档及其 cookie 并检查它们为什么不同......
-
因为您使用的是带有静态端口的 localhost,所以我认为您的主机名不会发生变化,但是我建议您使用 fiddler 对其进行调试(登录时会发生一些事情)跨度>
-
@highwingers - 它不仅仅是在发生时登录,它会在 chrome 中的每个请求中发生。
-
@Aristos - 在 chrome 的调试器中检查资源选项卡时,主机名保持不变,cookie 名称也保持不变。
-
@highwingers - cookie 在 chrome 中没有被禁用。我可以在调试器面板的资源选项卡中看到 sessionId cookie。
标签: c# asp.net asp.net-mvc-3 session