我想我可能发现ASP.NET MVC存在问题,而且它是事件管道。特别是,我发现Session_Start被多次调用,每个都包含一个新的SessionID。
以下是分步过程:
添加以下方法(是的,它是空的):
protected void Session_Start() { }
在方法
我在标准的ASP.NET Web应用程序(而不是MVC)上尝试了同样的事情,而Session_Start只触发了一次。
我很确定我在这里做错了,因为我使用的是默认项目模板,而且唯一被修改的代码是Global.asax.cs文件,用于添加Session_Start方法。 / p>
我正在使用IIS Express,但我使用“Cassini”Web服务器(Visual Studio Development Server)重复了上述步骤,结果相同。
有什么建议吗?
我决定在调试会话期间使用Fiddler检查HTTP流量。看来:
我记下了生成的三个SessionID中的每一个,并且看起来浏览器所持有的是第一个。因此,当我们进入上面的第6步,并且一切似乎都有效时,它实际上使用了生成的第一个SessionID。
所以......我决定主持一个“favicon.ico”文件。我将ico文件放在项目的根目录中,然后再次启动我的调试会话。这次,Session_Start只触发一次。 “/favicon.ico”成功送达(200)。
所以......我猜它在某种意义上是按照它的方式工作的......但是为什么调用“/favicon.ico”会触发Session_Start事件????我不应该选择不托管图标吗?
ASIDE:我在ASP.NET(而不是mvc)项目中尝试了以上所有内容,并且它没有相同的问题,即使没有由默认“ASP.NET Web应用程序”托管的favicon.ico文件项目
答案 0 :(得分:5)
我有点有一段时间有这个问题,最后我意识到这是因为有一些http / https shenanigans正在进行...看起来它会破坏并重新创建你的会话如果你翻转像那样的ssl,你有
<sessionState mode="InProc" sqlCommandTimeout="3600" timeout="120" cookieless="false" />
<httpCookies httpOnlyCookies="true" requireSSL="true" />
可能是新玩家或真正疲惫但没有注意的人的陷阱! :) 只是因为这可以帮助任何人...
答案 1 :(得分:2)
我想我已经到了一个点,我有几个解决方案(虽然对我来说似乎都很'hacky'),所以我想我会接受这些并继续前进。
从@Tz_上面得到评论提到我应该忽略favicon文件的路线。这基本上就是我要做的。 (荣誉@Tz _!)
遇到以下post,(其中包括)。它描述了一个问题,当浏览器从ASP.NET MVC站点请求“/favicon.ico”文件时,MVC堆栈错误地尝试查找并实例化控制器。我不确定这是否适用于我的情况,但答案建议添加以下路线条目:
routes.IgnoreRoute("favicon.ico");
我试了一下(添加了上面的内容),并修复了它!
所以,我仍然不知道为什么“/ favicon.ico”请求在MVC中有错误的身份,但我知道如何在我的情况下修复它。之一:
同样,对我来说,两者似乎都是黑客,因为我认为这是控制器工厂应该能够优雅地处理的事情。 IMHO
答案 2 :(得分:1)
每次Session_Start
点击的原因是因为<httpCookies requireSSL="true" />
<system.web>
中的Web.Config
删除了这个,你就可以了。
答案 3 :(得分:0)
我无法重现这个问题。我使用IIS 7.5,Cassini和IIS Express测试了ASP.NET MVC 3 /工具更新,Win08 / R2 / SP1和Win7 / SP1。我在Fiddler中看到了404 favicon请求,但是对于favicon来说,没有达到突破点。我用IE9测试了当前的FF和Chrome。每次我使用新浏览器访问该站点时,都会调用Session_Start()并看到新的会话ID。我为微软工作,所以我想知道如何重现这个问题。
答案 4 :(得分:0)
当我在我的网页中有一些<img>
时出现错误的“src”属性时,就会发生这种情况。在“src”中放置一个有效的路径解决了我的问题。