0

我有一个现有的 ASP.NET MVC 应用程序,它使用基于表单的自定义身份验证,方法是创建FormsAuthenticationTicket并按照http://msdn.microsoft.com/en-us/library/system.web 上的示例编写身份验证 cookie。 security.formsauthenticationticket(v=vs.110).aspx

现在,当我添加对 51degrees 移动设备检测框架的引用时,我陷入了身份验证循环,其中context.Request.IsAuthenticated永久报告false

我已经追踪到context.Request.Browser.Cookies现在也报告false的事实,这解释了为什么我的身份验证 cookie 没有任何效果。但是什么会导致图书馆认为我的桌面浏览器(在这种情况下是 Chrome,如果这有什么不同的话)突然不支持 cookie?检测库中的错误?我的配置错误或代码错误?还有什么?

4

1 回答 1

1

我刚刚使用 nuget 升级到 51degrees V3 并遇到了同样的问题。

你是对的 -context.Request.Browser.Cookies是假的,所以没有设置身份验证 cookie,即使有一个也不会被读取。我尝试使用FormsAuthentication.GetAuthCookie()后跟 a手动设置它Response.Cookies.Add(),但它仍然无法正常工作。

我认为这是 51degrees 库中的错误。但我确实有解决办法。

根据 MSDN,FormsAuthentication.CookiesSupported依赖于FormsAuthentication.CookieMode属性,它依赖于<forms cookieless="">属性。

默认情况下,如果<form> cookieless未设置该属性,则默认为UseDeviceProfile51degrees 报告false,因此表单身份验证不会查看或设置 cookie。

手动设置<form cookieless="UseCookies">强制FormsAuthentication.CookiesSupported为真,因此设置并读取 auth cookie。

我试过了,身份验证再次起作用。

来源: http: //msdn.microsoft.com/en-us/library/system.web.security.formsauthentication.cookiessupported (v=vs.110).aspx

--Edit--:<sessionState>system.web 元素也有一个cookieless属性。它UseCookies默认设置为,因此使用会话 cookie 的会话状态仍然有效。来源: http: //msdn.microsoft.com/en-us/library/h6bb9cz9 (v=vs.100).aspx

于 2014-06-05T02:36:36.690 回答