2

我意识到有几个与此相关的问题;但是我一直在疯狂地试图完成这项工作。简单地说,我有一个位于我们公司服务器上的 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。

有任何想法吗?

4

1 回答 1

0

经过深思熟虑和与不同浏览器的斗争,我们公司最终决定放弃 cookie,转而使用基于数据库的会话。这完全解决了这个问题,因为我们正在处理在 iframe 中托管我们网站的第三方网站。

希望这对其他人有所帮助 - 在 iframe 中使用 cookie 没有干净的方法。

于 2013-05-23T13:33:31.440 回答