3

在玩弄global.asax.cs文件时,我在其中附加了一些代码

protected void Session_Start(object sender, EventArgs e)
{

}

然后开始注意到Session_Start在使用 chrome 时每次请求都会调用它。使用 firefox 时,情况并非如此,它只被调用一次。这可能是什么原因造成的?

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

当我打开 chrome 并浏览到http://localhost:63893/它时,点击Session_Start. 然后我输入我的登录数据并点击登录,它再次点击Session_Start然后在加载下一页的获取请求时再次点击。我用计数器查看,实际上在那段时间创建了 3 个独特的会话。Session_Start

我知道有一些消息来源指出,当没有值存储在会话中时,会话被放弃。这对我来说是一个很好的解释,但事实并非如此。我用两种方法反驳了这一点。

方法一:

protected void Session_End(){} /*breakpoint*/

从未解雇,我可以确认旧会话仍然存在。

方法二:

使用Session["KeepAlive"] = true;inside ofSession_Start来查看是否会阻止_Start被调用,但它没有。_End仍然没有被调用。

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

4

1 回答 1

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 不会发送带有 favicon 请求的 cookie。所以,对于那些虽然这是一个 cookie 问题的人:你是对的。

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

routes.IgnoreRoute("favicon.ico");

现在谷歌不再每次他们想要我的图标时都得到一个会话。

于 2013-04-16T23:45:36.890 回答