我的.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。
答案 0 :(得分:3)
答案 1 :(得分:1)
另一个可能的原因/解决方案是,如果域名具有下划线,IE不会保存cookie(因为严格来说,域名不能有下划线,因此您可能只会在开发中遇到此问题),例如: http://my_dev_server/DoesntWork
。 Chrome或Firefox应该适用于这种情况,如果您更改了您正在使用的域名,则不会解决下划线问题。
参考:
答案 2 :(得分:0)
加载提琴手。注意Set-Cookie响应并记下cookie域。确保它与您的网站匹配。然后在下一个请求(从重定向到操作)上确保cookie被发送,并再次与请求中的域匹配。