我在电子商务网站工作。我们所做的部分工作是为一些客户提供定制商品。最近,一些非技术管理层承诺我们可以将我们的结账流程纳入这样一个客户的网站。我们弄清楚如何做到这一点的唯一方法是使用iframe(我知道,我也不喜欢它)。问题是该网站的大多数客户无法签出,因为我们使用cookie来确定要显示的自定义项目。浏览器将我们的cookie识别为第三方,并且几乎每个人都关闭了第三方cookie。如果答案是肯定的,我会感到震惊,但有没有解决办法呢?即托管我们的iframe的网站能以某种方式提供必要的cookie吗?
答案 0 :(得分:5)
尝试一个不可见的插页式页面。
基本上,托管网站会向您域中的网站发布重定向,然后可以自由设置Cookie(因为此时实际上是第一方)。然后,您的网站会立即重定向回主机网站。此时,您新创建的cookie对于托管站点是不可见的,但此后您的iFramed页面可以看到。
不幸的是,每次更新cookie时托管站点都必须这样做,但双重定向可以很快发生,他们几乎不会注意到。希望您的系统只需要设置一次cookie。
答案 1 :(得分:1)
不使用cookie,而是将每个url请求中的信息作为名称/值对传递。
将名称/值添加到每个网址有点痛苦......我知道......哦......它会起作用。
答案 2 :(得分:0)
如果答案是肯定的话,我会感到震惊,但有没有解决办法呢?即托管我们的iframe的网站能以某种方式提供必要的cookie吗?
您的iframed页面本身(在此方案中是第三方)可以发送P3P Cookie策略标头 - 默认情况下某些浏览器会接受第三方Cookie,而其他浏览器(主要是Safari)将无法在所有,如果不是由用户自己操纵默认设置。
您还可以做的是,不是(仅)通过cookie传递会话ID,而是作为GET或POST参数传递 - f.e.在PHP下,通过配置会话选项可以很容易地完成。你应该考虑是否值得稍微增加会话窃取的风险。
答案 3 :(得分:0)
插页式页面解决方案应该可以正常运行,但是对于您的托管网站来说可能会遇到很多麻烦,所以这里有另一种解决方案可以让您无法使用cookie。
编写一个响应BeginRequest事件的HttpModule,读取查询字符串,并将相应的cookie头插入Context.HttpRequest对象(注意:你不能使用AddCookie,你必须使用AddHeader,因为模块添加了cookie在他们正确申请之前直接处理掉。这样主机站点可以简单地发出一个请求(在iFrame中),其中包含查询字符串中的必要值,模块会将其转换为cookie(仅存在于内存中,而不是存在于线路中),并且您的应用程序将是欺骗了认为那里有一个cookie。无需更改代码,只需在web.config中添加模块即可。
仅当您在集成管道模式下使用IIS 7.0+时才有效。如果您使用的是早期版本的IIS,或者必须以经典模式运行,则需要使用ISAPI过滤器。
答案 4 :(得分:-1)
约翰·瑞安(Ryan) 对于带有SameSite标志的Chrome v80更新,想为托管我们iframe的网站设置samesite = none; secure,并以某种方式提供必要的samesite = none; secure cookie。我们有Apache 2.2和tomcat 6的安装程序,因此希望能提供解决方案和有关如何使其工作的建议。当前启用了标记的iFrame无法成功打孔。 谢谢