在使用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个独特的会话。
我知道有一些消息来源说明会在没有存储任何值时放弃会话。这对我来说是一个很好的解释,但事实并非如此。我用两种方法反驳了这一点。
方法1:
protected void Session_End(){} /*breakpoint*/
从未被解雇,我可以确认旧会话仍然存在。
方法2:
在Session["KeepAlive"] = true;
内使用Session_Start
来查看是否会阻止_Start
被调用,但事实并非如此。 _End
仍未被调用。
两者之间有什么不同,或者我做错了什么?
答案 0 :(得分:6)
感谢所有评论方面的帮助。我们实际上是通过聊天和博客文章链接解决了这个问题:http://tobiefysh.blogspot.co.uk/2010/12/chrome-is-eating-my-session-varibles-or.html
它解释了there was a 302 response when trying to get to favicon.ico
。基本上,chrome正在请求favicon.ico,它正在使用RegisterRoutes
方法并将其转换为Session_Start
方法,从而产生过多的会话。
它一直到Session_Start
的原因是因为google chrome does not send cookies with favicon requests。所以,对于所有那些虽然是cookie问题的人:你是对的。
非常简单的解决所有烦恼,只是将其添加到我的RegisterRoutes
方法
routes.IgnoreRoute("favicon.ico");
现在谷歌每次想要我的图标时都不再获得会话。