Переменная сеанса теряется на RedirectToAction в IE - PullRequest
1 голос
/ 27 сентября 2011

Мой сайт .NET MVC3 загружается через iframe на родительский сайт. Они получают действие контроллера на моем сайте с определенными параметрами в строке запроса. Мое действие проверяет эти параметры, сохраняет их в сеансе и выполняет RedirectToAction () для действия другого контроллера. Во втором действии первая строка кода получает эти параметры из сеанса. У нас не было проблем в DEV, более того, у нас не было проблем в QA.

В Production, после перенаправления, переменная сеанса очищается. Это происходит только в IE 8 и 7. Рабочий сервер имеет балансировщик нагрузки, но в данный момент второй сервер выключен, и проблема все еще существует. Вот код, я удалил проверку и некоторые другие вещи.

//Here is where they come in
[HttpGet]
public ActionResult Index(string locationGUID, string OtherParam)
{
   //?locationGUID=ABCDEFGHIJKLMNOP,XXXXXXXXX&ContractInstance=2111,#####
   //some validation here

   var passedData = new PassedData
       {
         Guids = locationGUID.Split(',').ToList(),
         OtherParam = OtherParam 
       };


   PassedData = passedData;

   //more validation and init DB logging here

   return RedirectToAction("Index", "OtherController");
}

//PassedData is a property of Base Controller, from which all other controllers inherit
public PassedData PassedData
{
   get { return (PassedData)Session["PassedData"]; }
   set { Session["PassedData"] = value; }
}

//Here is Index of "OtherController", when we get here in Prod in IE, first line throws null reference exception, because PassedData is now NULL....
[HttpGet]
public ActionResult Index()
{
   ViewBag.CustInfoList = PassedData.Guids.Select(guid => GetCustomerInfo(guid).Data).ToList();
//the rest of the code is not relevant to this question, since PassedData is already NULL :(
}

Большое спасибо заранее!

ОБНОВЛЕНИЕ: Я реализовал режим состояния сеанса "StateServer". Ничего не изменилось.

ОБНОВЛЕНИЕ: Я смотрю на Фиддлера. IE: родительский сайт устанавливает сессионный cookie. Мой сайт не FF: на обоих сайтах установлен cookie сессии.

Ответы [ 3 ]

3 голосов
/ 28 сентября 2011

Это связано с тем, что IE не доверяет файлам cookie, созданным IFrames

См Cookie заблокирован / не сохранен в IFRAME в Internet Explorer для подробного объяснения и исправления.

НТН

1 голос
/ 12 февраля 2014

Другая возможная причина / решение заключается в том, что IE не сохраняет куки, если доменное имя имеет подчеркивание (потому что, строго говоря, доменные имена не могут иметь подчеркивания, так что вы, вероятно, столкнетесь с этим только при разработке), например, http://my_dev_server/DoesntWork.Chrome или Firefox должны работать в этом сценарии, и если вы меняете имя домена, которое вы используете, чтобы проблема с подчеркиванием не была решена.

Ссылка:

0 голосов
/ 27 сентября 2011

Загрузите скрипач.Следите за ответом Set-Cookie и запишите домен cookie.Убедитесь, что он соответствует вашему сайту.Затем при следующем запросе (от перенаправления к действию) убедитесь, что файл cookie пересылается, и снова он соответствует домену в запросе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...