2012-12-27 73 views
2

我意識到有幾個問題與此有關;但是我一直在瘋狂地嘗試做這項工作。簡而言之,我有一個駐留在公司服務器上的MVC3應用程序,它在客戶端URL上的iFrame中提供。對於其他所有瀏覽器,所有這一切都很好,對Safari瀏覽器執行操作,該瀏覽器默認打開整個「無第三方Cookie」設置。Safari iFrame Cookie問題

因此,這裏是我到目前爲止已經試過(我們有自定義庫,所以其中的一些功能是專門針對我們的東西):

查看:

@if ((HttpContext.Current.Request.UserAgent.ToLower().IndexOf("safari") >= 0) && HttpContext.Current.Request.Cookies["safari_cookie_set"] == null) 
{ 
    using (Html.BeginRouteFormSSL(RouteNames.SafariRedirect, FormMethod.Post, new { id = "safari-fix-form" })) 
    { <input type="submit" value="Go!" /> } 
} 

控制器:

[AcceptVerbs(HttpVerbs.Post)] 
public virtual ActionResult SafariRedirect() 
{ 
    ActionResult result = null; 

    Response.Cookies.Add(new HttpCookie("safari_cookie_set", "cookie ok")); 
    result = RedirectToRouteNoSSL(Index); 

    return result; 
} 

的Javascript:

safariValidate: function(){ 
    if ($.browser.safari == true && document.cookie.indexOf("safari_cookie_set") == -1){ 
      $("#safari-fix-form").submit(); 
     } 
} 

所以最初,前提是使用javascript自動發佈到iframe(因此.submit())。這似乎工作了一天左右。現在,我如何發佈(注意輸入按鈕在這裏)並不重要,cookie不會在iframe中設置。

任何想法?

回答

0

經過多次審議並與不同的瀏覽器鬥爭之後,我們公司最終決定拋棄cookie,轉而使用基於數據庫的會話。這完全解決了這個問題,因爲我們正在處理在iframe中託管我們網站的第三方網站。

希望這會幫助其他人 - 在iframe中沒有乾淨的方式來使用cookie。

+0

如何在iframe內的頁面請求間持續保持會話? – bennick

+0

這是兩年前創建/完成的,但如果我沒有記錯,我們會傳遞一個會話GUID並始終將其包含在模型庫中。這樣,無論你來自哪裏,GUID都可以使用,但這也是由於內存泄漏。 – brenton