我有一个现有的ASP.NET MVC应用程序,它使用基于表单的自定义身份验证,通过创建 FormsAuthenticationTicket 并根据http://msdn.microsoft.com/en-us/library/system.web.security.formsauthenticationticket(v=vs.110).aspx的示例编写auth cookie。
现在,当我添加对51degrees移动设备检测框架的引用时,我陷入了一个auth循环, context.Request.IsAuthenticated 永久报告 false 。
我已经跟踪了 context.Request.Browser.Cookies 现在还报告 false 的事实,这解释了为什么我的身份验证Cookie没有任何影响。但是什么会导致图书馆认为我的桌面浏览器(在这种情况下是Chrome,如果这有什么不同)突然不支持cookie?检测库中的错误?我的配置错误或代码错误?还有别的吗?
答案 0 :(得分:1)
我刚刚使用nuget升级到51degree V3并遇到了同样的问题。
您是对的 - context.Request.Browser.Cookies
是错误的,因此身份验证Cookie无法设置,即使有人也无法读取。我尝试使用FormsAuthentication.GetAuthCookie()
然后使用Response.Cookies.Add()
手动设置它,但它仍然无法正常工作。
我认为它是51degrees库中的一个错误。但我确实有一个解决方案。
根据MSDN,FormsAuthentication.CookiesSupported
依赖于FormsAuthentication.CookieMode
属性,该属性依赖于<forms cookieless="">
属性。
默认情况下,如果未设置<form>
cookieless
属性,则默认为UseDeviceProfile
,51degrees报告false
,因此表单身份验证不会查看或设置饼干。
手动设置<form cookieless="UseCookies">
强制FormsAuthentication.CookiesSupported
为真,因此设置并读取身份验证Cookie。
我试过了,身份验证又重新开始了。
- 编辑 - :<sessionState>
system.web元素也有cookieless
属性。默认情况下,它设置为UseCookies
,因此使用会话Cookie的会话状态仍然有效。
资料来源:http://msdn.microsoft.com/en-us/library/h6bb9cz9(v=vs.100).aspx