2011-06-09 79 views
0

我有一个使用自定义表单身份验证票据的Web应用程序。我使用自定义身份验证机制进行登录,并创建自定义身份验证票证。ASP.NET MVC2控制器无法识别身份验证票据

从Web应用程序,我然后定期Ajax调用MVC2控制器,询问用户是否通过身份验证。控制器方法是这样的:

public ActionResult GetAuthenticationStatus() 
     { 
      string responseDoc; 

      if (HttpContext.User != null 
       && HttpContext.User.Identity.IsAuthenticated) 
      { 
       responseDoc = "{\"status\":\"authenticated\"}"; 
      } 
      else{ 
       responseDoc = "{\"status\":\"unauthenticated\"}"; 
      } 

      return new ContentResult { Content = responseDoc, ContentType = "application/json" }; 

     } 

IIS日志表明身份验证票证的cookie在IIS成功抵达,但我的控制器方法返回{\“状态\”:\“未\”}如此明显看来我的控制器检查用户身份验证条件是不正确的。

奇怪的是,它在Chrome中运行正常。但是,它在移动Safari中不起作用。任何人都可以看到我的控制器方法有什么问题?

谢谢。

+0

您是否尝试过在此控制器操作中设置断点并检查您的自定义身份验证提供程序返回的内容? – Lazarus 2011-06-09 08:41:46

+0

@Lazarus - 它只发生在移动Safari上,我无法在我的开发PC上运行,因此无法在本地重现。 – Journeyman 2011-06-09 08:49:49

+0

是否在此移动Safari中启用Cookie? – 2011-06-09 09:01:48

回答

0

我相信我有答案。您需要专门设置web.config以强制使用Cookie。我在web.config中的身份验证设置如下所示:

<authentication mode="Forms"> 
     <forms loginUrl="~/Account/LogOn" timeout="2880" 
      cookieless="UseCookies" 
      /> 
    </authentication> 

这是Cookieless =“UseCookies”条目解决了问题。这个的默认值是UseDeviceProfile。一定是iPad没有一致的UseDeviceProfile制度。