我有一个使用 ASP.NET MVC 3.0 构建的应用程序。它使用asp.net 的内置表单例份验证,没有 session 状态和浏览器上的cookie 来识别发出请求的用户。
现在,当我使用 IE9 测试应用程序时,典型的 HTML 请求会在 header 中发送此用户代理,并且一切正常。
用户代理:Mozilla/5.0(兼容;MSIE 9.0;Windows NT 6.1;WOW64;Trident/5.0)
但是,我们在应用程序中有一个页面,其中有一个 ActiveX 容器,用于在浏览器中托管 Microsoft Word。这个 ActiveX 容器的目的是允许您对 word 文档进行修改,单击按钮将带有更改的 word 文档发布到我们的服务器,以便保存。
ActiveX 控件中有一个方法——来自 www.ocxt.com 的 Office 查看器组件——称为 HttpPost(),它可以将查看的文档的内容发布到服务器。
当您调用 HttpPost() 时,它会正确发送所有相同的 cookie,但使用不同的 User-Agent 字符串。
用户代理:Mozilla/4.0(兼容;MSIE 5.5;Windows NT 4.0)
使用 MSIE 5.5 字符串的 UserAgent 似乎导致 ASP.NET 或 MVC 不将请求发送到适当的 Controller ,而是将重定向响应发送到登录页面,即使 session 的 cookie 是正确的。我用 Fiddler 做了一个测试,并尝试使用 MSIE 6.0、7.0、8.0,这些似乎工作正常,所以具体来说,5.5 会导致部分服务器堆栈重定向到登录页面。
这个页面过去工作得很好,所以我不确定最近版本的 ASP.NET/MVC 是否有什么变化,还是因为我已经升级到 IE9.0,但基本上,我想知道如果可以告诉 ASP.NET 在确定 session 是否已经通过身份验证时不考虑用户代理。
谢谢。
最佳答案
IIRC 在 ASP.NET 4.0 中发生了变化,其中 Forms 身份验证使用用户代理来检测它是否支持 cookie,如果它不是公认的或不受支持的用户代理,则它根本不使用身份验证 cookie。您将需要更改 HTTP 请求的用户代理。
关于asp.net - 触发表单例份验证的 User-Agent header 中的更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7570660/