【问题标题】:.NET Membership.GetUser() null in ie9 and safari when embedded in iframe.NET Membership.GetUser() null 在 ie9 和 safari 中嵌入 iframe 时
【发布时间】:2012-03-28 21:43:38
【问题描述】:

好吧,我被难住了。这是场景: 我在远程站点的 iframe 中嵌入了一个 .net 4.0 mvc3 应用程序(剃须刀)。我有一个标准的会员资格提供商以确保安全,只要我使用 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 对象为空。

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

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

【问题讨论】:

  • 你看过 p3p 标头吗?

标签: c# .net iframe membership


【解决方案1】:

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

因此,您应该为网站添加适当的标题,它应该可以正常工作。

希望对您有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-05
    • 1970-01-01
    相关资源
    最近更新 更多