登录后,Request.IsAuthenticated 的值不会保持为真。它可以在所有主要的桌面浏览器上完美运行,但不适用于 iPad 上的移动 safari。
我已经尝试了使用 iPhone UIWebView 时发布的 Asp.Net Forms Authentication和在 iPad 上使用 jQueryMobile 时未存储的 ASP.NET 身份验证 cookie的两种解决方案,但它们似乎都不起作用。知道为什么它不起作用吗?
感谢您提前提供任何帮助。
登录后,Request.IsAuthenticated 的值不会保持为真。它可以在所有主要的桌面浏览器上完美运行,但不适用于 iPad 上的移动 safari。
我已经尝试了使用 iPhone UIWebView 时发布的 Asp.Net Forms Authentication和在 iPad 上使用 jQueryMobile 时未存储的 ASP.NET 身份验证 cookie的两种解决方案,但它们似乎都不起作用。知道为什么它不起作用吗?
感谢您提前提供任何帮助。
抱歉挖掘了一个旧线程,但这是搜索 MVC 和 ipad 登录问题时的最佳结果之一。
我找到的解决方案是强制 web conifg 中身份验证标签的 cookieless="UseCookies" 属性。
<authentication mode="Forms">
<forms loginUrl="~/LogOn" timeout="2880" cookieless="UseCookies"/>
</authentication>
出于某种原因,Mobile Safari 浏览器会发送一个请求无 cookie 会话的标头,如果未设置该属性,它将默认使用会话令牌重写 url。由于某种原因,这并不总是有效,导致登录失败。
我希望没有人会介意我在这一篇上的后期贡献。我遇到了同样的问题:无法从 iPhone Safari 浏览器登录到我的 ASP.NET MVC 4 应用程序。我最终在我的开发机器上打开了相关端口,以允许我的 iPhone 访问在 IISExpress 中运行的应用程序实例,以便我可以调试它。
我在我的应用程序代码中设置了一个断点,并从我的手机发出了相关请求。然后,我将该标头内容与我知道正在运行的请求的标头内容(来自桌面浏览器)进行了比较。我发现没有与 iPhone 请求相关的 cookie 标头信息。
所以...这使我进入了我的 iPhone 的 Safari 设置页面。出于某种原因,我的隐私设置被设置为“接受 Cookie”为“从不”。我将其更改为“来自已访问”,它解决了我的问题。根据 Google 叔叔告诉我的内容,“来自已访问”是 iPhone 的默认设置。我想如果我们想支持“从不”的情况,那么我们就必须查看实现无 cookie 表单身份验证的路径(沿着这里讨论的路线)。
希望对某人有所帮助:)。
好的,我通过对响应缓存的一些蛮力解决了这个问题......
public void Application_PreSendRequestHeaders(Object sender, EventArgs e)
{
Response.Cache.SetCacheability(HttpCacheability.NoCache);
}
这会强制将响应头设置为
Cache-Control:no-cache
强制 iOS6 下的 Safari 停止缓存 POST。