Session_Start在chrome中经常被调用
本文关键字:调用 chrome Start Session | 更新日期: 2023-09-27 18:09:28
在处理global.asax.cs
文件时,我在
protected void Session_Start(object sender, EventArgs e)
{
}
,然后开始注意到Session_Start
在使用chrome时的每个请求都被调用。当使用firefox时,情况并非如此,它只被调用一次。是什么原因造成的呢?
注意,这只在我的开发机器上。我编译并运行代码,打开firefox,浏览到http://localhost:63893/
,它击中了Session_Start
。在火狐浏览器中,它只点击一次Session_Start
。
当我打开chrome浏览器,浏览到http://localhost:63893/
,它击中Session_Start
。然后我输入我的登录数据并点击login,它再次点击Session_Start
,然后在加载下一页的get请求时再次点击Session_Start
。我使用计数器来查看,实际上在此期间创建了3个唯一的会话。
我知道有一些源声明会话在没有存储值时被放弃。这对我来说是一个很好的解释,但事实并非如此。我用两种方法反驳了这一观点。
方法1:protected void Session_End(){} /*breakpoint*/
从未触发,并且我可以确认旧的会话仍然存在。
方法2:在Session_Start
内部使用Session["KeepAlive"] = true;
,看看是否会阻止_Start
被调用,但没有。_End
仍未调用。
两者之间有什么不同,或者我做错了什么?
感谢所有评论的帮助。我们实际上在聊天中解决了这个问题,并通过一个链接到博客文章: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不发送带有favicon请求的cookie。所以,对于那些认为这是饼干问题的人:你是对的。
非常简单的修复所有的烦恼,只是把它添加到我的RegisterRoutes
方法
routes.IgnoreRoute("favicon.ico");
现在谷歌不再得到会话每次他们想要我的图标