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

本文关键字:GetUser Membership null NET 中的 iframe ie9 safari 嵌入 | 更新日期: 2023-09-27 18:29:23

好吧,我被难住了。以下是场景:我在一个远程站点的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对象为null。

我有一种感觉,它在某种程度上与iframe有关,但我现在对一切都持怀疑态度。如果我在iframe之外运行它;这意味着我直接调用它在所有浏览器中运行的url(我已经尝试过了)。

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

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

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

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

希望能有所帮助。