我意识到有几个与此相关的问题;然而,我一直在疯狂尝试做这项工作。简而言之,我有一个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(因此是.submit())自动发布到iframe。它似乎工作了一天左右。现在,我发布的方式并不重要(注意这里的输入按钮......),不会在iframe中设置cookie。
有什么想法吗?
答案 0 :(得分:0)
经过深思熟虑和不同浏览器的斗争后,我们公司最终决定放弃cookie,转而使用基于数据库的会话。这完全解决了这个问题,因为我们正在处理在iframe中托管我们网站的第三方网站。
希望这会对其他人有所帮助 - 在iframe中没有干净的方法来使用cookie。