我意识到有几个与此相关的问题;但是我一直在疯狂地试图完成这项工作。简单地说,我有一个位于我们公司服务器上的 MVC3 应用程序,它在客户端 URL 上的 iFrame 中提供。其他所有浏览器都很好,除了 Safari,它默认打开了整个“无第三方 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())。它似乎工作了一天左右。现在,无论我如何发布(请注意此处的输入按钮...),都不会在 iframe 中设置 cookie。
有任何想法吗?