我正在编写一个使用表单身份验证的Asp.net MVC 2应用程序,目前我的iPhone应用程序在通过Web进行身份验证/登录时遇到问题.我们开发了一个使用UIWebView控件的简单iPhone应用程序.在这个阶段,所有应用程序都会导航到我们的Asp.Net网站.简单吧?问题是,用户无法通过登录页面.重复步骤是:
但是用户然后被重定向到BACK登录屏幕!
我已经对此进行了一些广泛的调试,我所知道的是:
cookie被发送到客户端,客户端正在存储cookie.在iPhone调试器中验证了这一点,并使用Javsascript在页面上显示cookie数据.cookie正被发送回服务器.在Visual Studio调试器中验证了这一点.它是正确的cookie(它与设置的相同).User.Identity.IsAuthenticated属性由于某种原因返回false,即使auth cookie包含在Request对象中.我已经确认iPhone应用程序已设置为接受cookie,并且它们在客户端上.
这是有趣的事情:如果您在iPhone上打开Safari浏览器并直接访问我们的网站,它可以正常工作.
它在iPad上也具有相同的行为,因为它没有通过登录屏幕.这种模拟器和设备上的重复.
这个网站已经通过IE 7-8,Safari(适用于Windows),Blackberry,IEMobile 6.5,Phone 7进行了测试,可以找到它.唯一不适用的情况是iPhone应用程序中的UIWebView.
我正在使用ASP.NET MVC 3,使用表单身份验证(基于使用file-> new获得的修改后的vanilla帐户代码).
当您登录时,我正在设置一个身份验证cookie
FormsAuthentication.SetAuthCookie(userName, true);
Run Code Online (Sandbox Code Playgroud)
所以这应该设置一个持久的cookie.但是,如果我关闭浏览器并重新打开,当我浏览到该网站时,我被迫再次登录!我可以看到使用chrome dev工具创建cookie(.ASPXAUTH)并在关闭浏览器时不被删除,所以发生了什么?
我的web.config:
<authentication mode="Forms">
<forms loginUrl="~/Account/LogIn" timeout="10000"/>
</authentication>
Run Code Online (Sandbox Code Playgroud)
我正在IIS下本地测试这个,如果这有任何区别的话.
如果应用程序或选项卡在登录后立即关闭,一些 iPhone/iPad 设备就会丢失登录 cookie。
\n\n我在研究中发现并不幸解决的问题:
\n\nSafari 可能默认禁用 cookie(Cookie 在 MAC -Safari 和 IOS Mobile- Safari 中不起作用)
\n\n有人提到 cookie 值中的逗号和分号在 Safari 上不起作用(Cookie 在 MAC -Safari 和 IOS Mobile- Safari 中不起作用)(Safari 和 Asp.net 中 cookie 的奇怪问题)
\n\nString hash = FormsAuthentication.Encrypt(ticket);\nRun Code Online (Sandbox Code Playgroud)\n\nFormsAuthenticationTicket ticket = new FormsAuthenticationTicket(\n 1,\n user.MemberNumber.ToString(),\n …Run Code Online (Sandbox Code Playgroud)