Session_Start在chrome中经常被调用

Tra*_*s J 3 c# asp.net session asp.net-mvc-3

在玩这个global.asax.cs文件时,我附上了一些代码

protected void Session_Start(object sender, EventArgs e)
{

}
Run Code Online (Sandbox Code Playgroud)

然后开始注意到Session_Start在使用chrome时每个请求都会调用它.使用firefox时,情况并非如此,只调用一次.可能是什么导致了这个?

需要注意的是,这只适用于我的开发机器.我编译并运行代码,打开firefox,浏览http://localhost:63893/并点击它Session_Start.在Firefox中浏览时,它只能点击Session_Start一次.

当我打开chrome并浏览http://localhost:63893/它的命中Session_Start.然后输入我的登录数据和命中登录,并且它击中Session_Start另一时间,然后它击中Session_Start 另一个时间,同时加载下一个页面的GET请求.我使用了一个计数器来查看,实际上在那段时间内创建了3个独特的会话.

我知道有一些消息来源表明会话在没有存储值的情况下被放弃.这对我来说是一个很好的解释,但事实并非如此.我用两种方法反驳了这一点.

方法1:

protected void Session_End(){} /*breakpoint*/
Run Code Online (Sandbox Code Playgroud)

永远不会被解雇,我可以确认旧会议仍然存在.

方法2:

使用Session["KeepAlive"] = true;的内部Session_Start,看看是否会阻止_Start被调用,但事实并非如此._End仍未被召唤.

两者之间有什么不同,或者我做错了什么?

Tra*_*s J 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创建过多Sessions 的方法.

它一直是这样的原因Session_Start是因为谷歌浏览器不会发送带有favicon请求的cookie.所以,对于所有那些虽然是cookie问题的人:你是对的.

非常简单的解决所有烦恼,只是添加到我的RegisterRoutes方法

routes.IgnoreRoute("favicon.ico");
Run Code Online (Sandbox Code Playgroud)

现在谷歌每次想要我的图标时都不再获得会话.