【问题标题】:Session_Start getting called too often in chromeSession_Start 在 chrome 中被调用太频繁
【发布时间】:2013-04-16 23:05:00
【问题描述】:

在玩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 个不同的会话。

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

方法一:

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

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

方法二:

Session_Start 内部使用Session["KeepAlive"] = true; 来查看这是否会阻止_Start 被调用,但它没有。 _End 仍未被调用。

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

【问题讨论】:

  • 会话与浏览器上的cookie直接连接。如果出于任何原因,任何调用,都没有找到 cookie 是 make new session。 cookie 还与主机名相关联。您可以将其设置为一个名称,并尝试从其他名称中读取它。真正找到发生了什么的唯一方法是打开 chrome 上的工具,查看所有加载的文档及其 cookie 并检查它们为什么不同......
  • 因为您使用的是带有静态端口的 localhost,所以我认为您的主机名不会发生变化,但是我建议您使用 fiddler 对其进行调试(登录时会发生一些事情)跨度>
  • @highwingers - 它不仅仅是在发生时登录,它会在 chrome 中的每个请求中发生。
  • @Aristos - 在 chrome 的调试器中检查资源选项卡时,主机名保持不变,cookie 名称也保持不变。
  • @highwingers - cookie 在 chrome 中没有被禁用。我可以在调试器面板的资源选项卡中看到 sessionId cookie。

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


【解决方案1】:

感谢 cmets 的所有帮助。实际上,我们通过聊天和博客文章的链接解决了这个问题: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");

现在 google 不再在每次需要我的图标时都获得会话。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-05-29
    • 2023-03-29
    • 1970-01-01
    • 2012-10-30
    • 1970-01-01
    • 1970-01-01
    • 2016-01-28
    • 1970-01-01
    相关资源
    最近更新 更多