嵌入iframe时,ie9中的.NET Membership.GetUser()null和ifari中的safari

时间:2012-03-28 21:43:38

标签: c# .net iframe membership

好的,我很难过。这是场景: 我在远程站点的iframe中嵌入了一个.net 4.0 mvc3应用程序(razor)。我有一个安全的标准会员提供商,只要我使用Chrome或Firefox,一切正常。但是,当我使用ie9(兼容模式进出)和safari(仅尝试5.1.4)时,我在登录后尝试访问另一个控制器中的Membership.GetUser()时会收到System.NullReferenceException。

所以我在我的AccountController中成功登录并在此处重定向到我的TravelController:

public ActionResult LogOn(LogOnModel model, string returnUrl)
{
    try
    {
        if (ModelState.IsValid)
        {
            if (MembershipService.ValidateUser(model.UserName, model.Password))
            {
                FormsService.SignIn(model.UserName, model.RememberMe);
                log.Debug("User: " + model.UserName + " logged in."); 
                return RedirectToAction("Travel", "Travel");
            }
        }
    }
    catch(....

现在应用程序重定向到TravelController,它执行以下操作:

public ActionResult Travel()
{
    try
    {
        string userName = Membership.GetUser().UserName;
        ... code ...
    }
    catch(Exception ex)
    {
        throw;
    }
}

所以这一切在Chrome和Firefox中运行良好,但是当我尝试使用ie或safari运行相同的代码时,Membership对象为null。

我感觉它与iframe有某种关系,但我现在第二次猜测一切。如果我在iframe之外运行它;意思是我直接调用url它在所有浏览器中运行(我已尝试过)。

有什么想法吗? 提前谢谢。

1 个答案:

答案 0 :(得分:2)

身份验证基于Cookie。如果iframe不提供机器可读的隐私政策,则Internet Explorer不允许iframe中的第三方网站使用Cookie。有关详细信息,请参阅http://www.softwareprojects.com/resources/programming/t-how-to-get-internet-explorer-to-use-cookies-inside-1612.htmlhttp://en.wikipedia.org/wiki/P3P

所以你应该在网站上添加一个合适的标题,它应该可以正常工作。

希望有所帮助。