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仍未被召唤.
两者之间有什么不同,或者我做错了什么?
感谢所有评论方面的帮助.我们实际上通过聊天和链接到博客文章解决了这个问题: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)
现在谷歌每次想要我的图标时都不再获得会话.
| 归档时间: |
|
| 查看次数: |
2152 次 |
| 最近记录: |