2012-05-28 21 views
1

我有一个系统,其中包含一些内置在ASP.net MVC中的表单,该表单设计用于通过iframe跨多个第三方网站使用。每个第三方网站都被分配一个唯一的URL,例如会话在IE中的RedirectToAction之后清除?

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

控制器检查Guid是否有效,以及是否存在指定给它的自定义css文件的路径。如果存在,则将此自定义css存储在Session变量中--css文件全部驻留在托管iframe的域的Content/Style内的子文件夹中。然后用户被重定向到正确的表单。

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); 
    } 

布局文件中查找该再检查和导入:

每个形式控制器的从一个共同的控制器,其内有上OnActionExecuting替代时,其通过自定义的CSS到VIewBag继承正确的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中看到了不同的结果,并且ViewBag变量肯定被设置,但是这在活动服务器上根本不起作用。我看不出这里有什么问题?我已经在4种不同的机器上测试过(4种不同的人,具有非常不同的设置,都有相同的结果)

+0

也许这是跨域cookie的问题。设置P3P标题应解决它。关于SOP的P3P有很多问题。 – LukLed

+0

所有会话/ cookies都将源自同一个域(iFrame域),那么这不会使它们成为第一方? – Macros

+0

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

回答

1

也许这是跨域cookie的问题。设置P3P标题应解决它。关于SOP的P3P有很多问题。

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

宏使用无Cookie会话解决了他的问题。