Lin*_*nus 5 asp.net asp.net-mvc activex
我有一个使用ASP.NET MVC 3.0构建的应用程序.它使用asp.net的内置表单身份验证,没有会话状态,并在浏览器上使用cookie来识别发出请求的用户.
现在,当我使用IE9测试应用程序时,典型的HTML请求会在标头中发送此用户代理,一切正常.
用户代理:Mozilla/5.0(兼容; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)
但是,我们在应用程序中有一个页面,其中包含一个在浏览器中托管Microsoft Word的ActiveX容器.此ActiveX容器的目的是允许您对单词文档进行修改,单击按钮以将该单词文档与您对服务器的更改进行POST,以便可以保存它.
ActiveX控件中有一种方法 - 来自www.ocxt.com的Office Viewer Component - 称为HttpPost(),它将查看文档的内容发布到服务器.
当您调用HttpPost()时,它会正确发送所有相同的cookie,但使用不同的User-Agent字符串.
User-Agent:Mozilla/4.0(兼容; MSIE 5.5; Windows NT 4.0)
使用MSIE 5.5字符串的UserAgent似乎导致ASP.NET或MVC不将请求发送到适当的控制器,而是向Login页面发送重定向响应,即使cookie对于会话是正确的.我使用Fiddler进行了测试,并尝试使用MSIE 6.0,7.0,8.0,这些似乎工作正常,因此具体来说,5.5会导致部分服务器堆栈重定向到登录页面.
这个页面以前工作正常,所以我不确定最近的ASP.NET/MVC版本是否有变化,或者是因为我已经升级到IE9.0,但基本上,我想知道如果可以告诉ASP.NET在确定会话是否已经过身份验证时不考虑User-Agent.
谢谢.
IIRC在ASP.NET 4.0中有一个变化,其中Forms Authentication使用用户代理来检测它是否支持cookie,如果它不是已识别或不受支持的用户代理,则它根本不使用身份验证cookie.您需要更改HTTP请求的用户代理.