.NET Membership.GetUser () пусто в ie9 и safari, если встроено в iframe - PullRequest
4 голосов
/ 29 марта 2012

Хорошо, я в тупике. Вот сценарий: У меня есть приложение .net 4.0 mvc3 (бритва), встроенное в iframe на удаленном сайте. У меня есть стандартный поставщик членства для безопасности, и все работает нормально, если я использую Chrome или Firefox. Однако, когда я использую ie9 (как в режиме совместимости, так и вне его) и safari (только пробовал 5.1.4), я получаю исключение System.NullReferenceException при попытке доступа к Membership.GetUser () в другом контроллере после входа в систему.

Итак, я успешно вошел в свой 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 Ответ

2 голосов
/ 30 марта 2012

Аутентификация основана на куки.Internet Explorer не позволяет сторонним сайтам в iframe использовать куки, если они не предоставляют машиночитаемую политику конфиденциальности.Подробнее см. http://www.softwareprojects.com/resources/programming/t-how-to-get-internet-explorer-to-use-cookies-inside-1612.html и http://en.wikipedia.org/wiki/P3P.

Таким образом, вы должны добавить соответствующий заголовок к сайту (сайтам), и он должен работать нормально.

Надеюсь, чтопомогает.

...