[英]Why does my ASP.NET MVC application fire Session_Start multiple times for a single session?
[英]Session_Start firing multiple times on default ASP.NET MVC3 project
我想我可能发现 ASP.NET MVC 及其事件管道存在问题。 特别是,我发现 Session_Start 被多次调用,每次都包含一个新的 SessionID。
这是分步过程:
添加以下方法(是的,它是空的):
受保护的无效 Session_Start() { }
在方法中设置断点
我在标准 ASP.NET Web 应用程序(不是 MVC)上尝试了同样的事情,并且 Session_Start 只触发了一次。
我很确定我在这里没有做错什么,因为我使用的是默认项目模板,并且唯一正在修改的代码是 Global.asax.cs 文件,以添加 Session_Start 方法。
我正在使用 IIS Express,但我已经使用“Cassini”web 服务器(Visual Studio 开发服务器)重复了上述步骤,结果相同。
有什么建议吗?
我决定在调试 session 期间使用 Fiddler 检查 HTTP 流量。 看起来:
我记下了生成的三个 SessionID 中的每一个,并且浏览器保留的似乎是第一个。 因此,当我们执行上述第 6 步时,似乎一切正常,它实际上是在使用生成的第一个 SessionID。
所以...我决定托管一个“favicon.ico”文件。 我将ico文件放在项目的根目录下,然后再次开始调试session。 这一次,Session_Start 只触发一次。 “/favicon.ico”已成功投放(200)。
所以...我想它在某种意义上是按照它应该的方式工作的...但是为什么对“/favicon.ico”的调用会触发 Session_Start 事件???? 我不应该选择不托管网站图标吗?
旁白:我在 ASP.NET(不是 mvc)项目中尝试了上述所有方法,并且没有相同的问题,即使默认的“ASP.NET Web 应用程序”项目没有托管 favicon.ico 文件。
我有一段时间遇到这个问题,最后我意识到这是因为发生了一些 http/https 恶作剧......看起来它会破坏并重新创建你的session如果你像这样翻转 ssl 并且你有
<sessionState mode="InProc" sqlCommandTimeout="3600" timeout="120" cookieless="false" />
<httpCookies httpOnlyCookies="true" requireSSL="true" />
可能是新玩家或真正疲倦且不注意的人的陷阱:.)仅供参考,以防万一这对任何人都有帮助...
我想我已经到了一个我有几个解决方案的地步(尽管对我来说这两个似乎都很“hacky”),所以我想我会接受这些并继续前进。
从上面的@Tz_ 那里得到了一条评论,提到我应该忽略 favicon 文件的路径。 这基本上就是我要做的。 (荣誉@Tz_!)
遇到以下帖子,(除其他外)。 它描述了一个问题,即当浏览器从 ASP.NET MVC 站点请求“/favicon.ico”文件时,MVC 堆栈错误地尝试查找并实例化 controller。 我不确定这是否适合我的情况,但答案建议添加以下路线条目:
routes.IgnoreRoute("favicon.ico");
我试了一下(添加了上面的内容),并且修复了它!
所以,我仍然不知道为什么“/favicon.ico”请求在 MVC 中有错误的身份,但我知道如何在我的情况下解决它。 任何一个:
再一次,对我来说,两者都像是黑客,因为我认为这是 controller 工厂应该能够优雅地处理的事情。 恕我直言
您每次都触发Session_Start
的原因是因为您在 Web.Config 中的<system.web>
中有<httpCookies requireSSL="true" />
删除它,您对Web.Config
很好。
当我的页面中有一些带有错误“src”属性的<img>
时,这发生在我身上。 在“src”中放置一个有效路径解决了我的问题。
我无法重现此问题。 我已经使用 IIS 7.5、Cassini 和 Z5DA5ACF461B4EFB7E76ZEC861065B221 在 ASP.NET MVC 3/工具更新、Win08/R2/SP1 和 Win7/SP1 上进行了测试。 我在 Fiddler 中看到了 404 favicon 请求,但没有为 favicon 命中断点。 我用IE9、当前的FF和Chrome进行了测试。 每次我使用新浏览器访问该站点时,都会调用 Session_Start() 并且我会看到新的 session ID。 我在微软工作,所以我想知道如何重现这个问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.