我正在编写一个使用表单身份验证的ASP.NETMVC2应用程序,目前我的iPhone应用程序在Web身份验证/登录方面遇到了问题.我们已经开发了一个使用UIWebView控件的简单iPhone应用程序.在这个阶段,应用程序所做的一切就是导航到我们的ASP.NET网站.很简单,对吧?问题是,用户无法通过登录页面.再现步骤包括:

  • 打开iPhone应用程序.
  • 应用程序会导航到主页.
  • 用户没有经过身份验证,因此他们被重定向到登录屏幕/页面
  • 用户输入正确的用户名和密码.单击提交.
  • 在服务器端,使用FormsAuthentication.GetAuthCookie对用户进行身份验证,并生成cookie并将其发送到客户端.
  • 服务器发送被重定向,以将用户发送到正确的主页.

但是用户随后被重定向回登录屏幕!

我对此做了一些广泛的调试,我所知道的是:

cookie被发送到客户端,客户端正在存储cookie.在iPhone调试器中验证了这一点,并使用JavsScript在页面上显示cookie数据.cookie正在被发送回服务器.在Visual Studio调试器中验证了这一点.这是正确的cookie(与设置的cookie相同).属性用户.身份IsAuthenticated出于某种原因返回false,即使请求对象中包含auth cookie.我已经验证了iPhone应用程序已设置为接受cookie,并且它们位于客户端.

有趣的是:如果你在iPhone上打开Safari浏览器,直接转到我们的网站,它就可以很好地工作.

它在iPad上也有同样的行为,因为它没有通过登录屏幕.这在仿真器和设备上都是错误的.

这个网站已经在IE7-8,Safari(Windows版),Blackberry,IEMobile 6.5,Phone 7上进行了测试,并且可以正常工作.唯一不起作用的情况是iPhone应用程序中的UIWebView.

推荐答案

我们找到的解决方案是创建一个文件(Generic.Browser)并包含此XML,以告诉Web服务器"Mozilla"和默认浏览器设置都应该支持cookie.

<browser refID="Mozilla" >
    <capabilities>
        <capability name="cookies"  value="true" />
    </capabilities>
</browser>

Asp.net相关问答推荐

Visual Studio发布的网站得到错误类型JObject is not defined when page is load on server"''"

域名 + 子域名在IIS部署

如何在 ASP.NET 中以 'YYYY-MM-DD' 格式获取当前日期?

在 aspx 页面中使用 if else 和 eval

如何异步渲染局部视图

ASP.NET GridView 第二个标题行跨越主标题行

控制器 SessionStateBehavior 是只读的,我可以更新会话变量

iOS 8 / Safari 8 不适用于 ASP.NET AJAX 扩展

如何以编程方式获取会话 cookie 名称?

如何在不使用 Session 的情况下在 ASP.net 中的页面之间传递值

从 JavaScript 读取 web.config

使用 JObject 所需的库名称是什么?

如何配置 ELMAH 以使用 Windows Azure?我在 Elmah.axd 上得到 404

使用 LINQ 进行递归控制搜索

如何使用 ASP.NET 和 jQuery 返回 JSON

如何使用 encodeURIComponent() 解码在 JS 中编码的 HTML?

如何将我的 DDD 模型中的用户与身份验证用户集成?

当文件上传超出 ASP.NET MVC 中允许的大小时显示自定义错误页面

System.Web.Caching 还是 System.Runtime.Caching 更适合 .NET 4 Web 应用程序

ModelClientValidationRule 冲突