IE中RedirectToAction后会话被清除?

时间:2012-05-28 14:19:06

标签: c# asp.net-mvc

我有一个系统,其中包含许多在ASP.net MVC中构建的表单,旨在通过iframe在多个第三方网站上使用。为每个第三方站点分配一个唯一的URL,例如

http://iframedomain.com/iframe/f9a14f53-0528-4ad1-b451-8895360e57e4

控制器检查Guid是否有效,以及是否有分配给它的自定义css文件的路径。如果有,那么这个自定义css存储在一个Session变量中 - 所有css文件都驻留在托管iframe的域的Content / Style中的子文件夹中。然后用户被重定向到正确的表单。

每个表单控制器都继承自一个公共控制器,在该控制器上有OnActionExecuting的覆盖,它将自定义css传递给VIewBag:

    protected override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        if (Session["iFrameCSS"] != null)
        {
            ViewBag.iFrameCSS = Session["iFrameCSS"];
        }

        if (Session["JQueryTheme"] != null)
        {
            ViewBag.JQueryTheme = Session["JQueryTheme"];
        }

        base.OnActionExecuting(filterContext);
    }

布局文件然后检查这个并导入正确的CSS文件:

@if (ViewBag.iFrameCSS != null)
{
    string cssFile = ViewBag.iFrameCSS.ToString();
    if (cssFile.StartsWith("http", StringComparison.CurrentCultureIgnoreCase))
    {
        <link rel="stylesheet" href="@cssFile" type="text/css" media="screen, projection" />
    }
    else
    {
        <link rel="stylesheet" href="@Url.Content("~/Content/style/" + cssFile + ".css")" type="text/css" media="screen, projection" />
    }
}
else
{
    <link rel="stylesheet" href="no-custom-css-file.css" type="text/css" media="screen, projection" />
}

除了IE(在7/8/9中测试)之外,所有浏览器都能正常工作,其中css文件的链接不存在,并且使用了默认的css文件。我已在本地调试并在IE中看到不同的结果,其中Session正常工作并且ViewBag变量肯定已设置,但这根本不适用于实时服务器。我看不出这里有什么问题?我已经在4台不同的机器上进行了测试(4个不同的设置,设置非常不同,都有相同的结果)

1 个答案:

答案 0 :(得分:1)

这可能是跨域会话cookie的问题。设置P3P标头应解决它。在SO上有很多关于P3P的问题。

如果iframe位于与父级不同的域中,则它们是第三方Cookie,并且在Internet Explorer和Safari中默认设置它们有一些限制。

Macros通过使用无cookie会话解决了他的问题。