Session_Start在chrome中经常被调用

时间:2013-04-16 23:05:01

标签: c# asp.net asp.net-mvc-3 session

在使用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仍未被调用。

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

1 个答案:

答案 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");

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