2012-05-28 41 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會話解決了他的問題。