IE中的RedirectToAction会丢失会话变量

时间:2011-09-27 00:27:58

标签: asp.net-mvc-3 session iframe redirect

我的.NET MVC3网站正在通过父网站上的iframe加载。他们使用查询字符串中的某些参数在我的网站上获取控制器的操作。我的操作验证这些参数,将它们存储在会话中,并将RedirectToAction()执行到不同的控制器操作。在第二个操作中,第一行代码从会话中获取这些参数。我们在DEV中没有任何问题,而且我们在质量保证方面没有任何问题。

在生产中,重定向后,会话变量被清除。这只发生在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”。什么都没有改变。

更新:我在看Fiddler。 IE:父站点设置会话cookie。我的网站没有。 FF:两个站点都设置会话cookie。

3 个答案:

答案 0 :(得分:3)

这是由于IE不信任IFrame创建的Cookie

请参阅 Cookie blocked/not saved in IFRAME in Internet Explorer有详细解释和解决方法。

HTH

答案 1 :(得分:1)

另一个可能的原因/解决方案是,如果域名具有下划线,IE不会保存cookie(因为严格来说,域名不能有下划线,因此您可能只会在开发中遇到此问题),例如: http://my_dev_server/DoesntWork。 Chrome或Firefox应该适用于这种情况,如果您更改了您正在使用的域名,则不会解决下划线问题。

参考:

答案 2 :(得分:0)

加载提琴手。注意Set-Cookie响应并记下cookie域。确保它与您的网站匹配。然后在下一个请求(从重定向到操作)上确保cookie被发送,并再次与请求中的域匹配。