【问题标题】:Share a cookie between two websites在两个网站之间共享 cookie
【发布时间】:2012-09-04 10:18:52
【问题描述】:

我已经建立了一个网站 (A),它可以登录并从一个单独的 Web 服务中检索客户数据。

拥有 (A) 的组织也有一个网站 (B),该网站有一个 Web 表单。他们希望 (A) 上的登录客户能够点击进入 (B) 并查看包含其详细信息的预填充表单。

这意味着 (A) 必须将他们的客户 ID 写入 cookie,(B) 可以读取该 cookie,然后 (B) 可以从 Web 服务请求数据,并预填充表单。

这提出了两个问题:

  1. 网站 (B) 可以读取网站 (A) 的 cookie 吗?

  2. 如果是这样,为了防止有人编辑 cookie 并在表单中看到其他人的数据,我需要做一些事情,比如在 (A) 上加密 cookie,然后在 (B) 中解密 - 任何这方面的建议?

我无法将现有登录更改为 OAuth 或其他内容,因为该 Web 服务已被其他几个站点使用,因此无法更改。

【问题讨论】:

  • 嘿,我知道从那以后已经有很长时间了,但我和你的情况完全一样,你能告诉我你是怎么实现它的吗?我真的很感激。

标签: http cookies


【解决方案1】:

没有。网站 B 无法读取网站 A 的 cookie。

最简单的解决方法是将登录/凭据信息从网站 A 传递到网站 B,并让网站 B 设置单独的 cookie。例如,在登录网站 A 后,您可以使用加密的查询字符串将他们快速重定向到网站 B。然后网站 B 可以读取信息,设置自己的 cookie,并将用户重定向回网站 A。

这很混乱,但可能。

【讨论】:

  • 谢谢克里斯。问题是,没有“用户操作”表明他们想从 A 移动到 B。他们登录到 A,做一些活动,然后他们可能会在某个时候导航到 B,而不是通过站点 A 上的链接。可以将两个站点作为子域放在同一个域中。这会成为可能吗?
  • 如果登录后你可以快速将用户重定向到网站B,在那里设置cookie,然后将他们重定向回来,他们可以在未来的任何时间访问网站B(而cookie仍然存在)并提供这些信息。
  • 对不起,我在第一次阅读时没有看到双重重定向。这给了我一个选择,谢谢。
  • 嗨。我在 Instagram 上看到了 facebook cookie。好像他们可以通过不同的域共享cookie?
  • @Chris 通过这种方式,可以在特定数据库上识别用户,然后在我理解的情况下在网站之间共享信息
【解决方案2】:

互联网上有一些开源工具可以做到这一点,但这与 cookie 理念背后的整体理念背道而驰。 Cookie 只能由一个域访问。但是,您可以模拟该域并“破解”到浏览器中。不建议这样做,并且某些浏览器具有更严格的安全性并且不允许这样做。

我建议你在网站 A 中创建一个 web 服务,并授予 B 读取权限。

【讨论】:

  • 嘿@Frank Goortani,你能留下那些开源工具的链接吗?
【解决方案3】:

Cookie 只能被它们设置的单个域访问。

我相信,如果您在同一个域上使用两个子域,则可以共享 cookie,但是浏览器不会将在一个域上设置的 cookie 发送给任何其他域。

编辑:您还希望避免在 cookie 中存储大量数据。您是否有机会创建一个站点 B 可以使用 javascript 查询的 api?

【讨论】:

    【解决方案4】:

    您提到同一家公司拥有这两个网站。正如您所怀疑的,如果这些站点具有相同的域,例如 www.mycompany.com 和 store.mycompany.com,那么它们可以共享 cookie。 HTTP 响应标头看起来像这样:

    Set-Cookie: user_id=1295214458; Path=/; Domain=.mycompany.com
    

    由于客户端可以直接访问这些数据,因此您还应该包含一个签名,以便检测到篡改。通常整个事情都被加密并签署成一个“令牌”,并将其设置为cookie。但从技术上讲,只需要签名即可。

    【讨论】:

      【解决方案5】:

      如果您的所有用户都使用支持 HTML5 的浏览器,您可以使用window.postMessage 方法,该方法允许在一侧使用addEventListener,从另一侧使用postMessage。这是一篇不错的文章/示例:https://developer.mozilla.org/en-US/docs/Web/API/window.postMessage.

      那么步骤就简单了:

      1. 将隐藏的 iframe 添加到站点 A 到站点 B
      2. 使用 window.postMessage 将 B 的 cookie 发送给 A
      3. 将接收到的cookie存储在A的cookie中

      【讨论】:

        【解决方案6】:

        可能的解决方法:您可以在辅助站点上使用内联框架来显示来自主站点的内容(占据整个窗口):

        <!DOCTYPE HTML>
        <html>  
          <head>  
               <title>your page title</title>  
                <style type="text/css">
                    body, html {
                    margin: 0; padding: 0; height: 100%; overflow: hidden;
                    }
                    #content {
                    position:absolute; left: 0; right: 0; bottom: 0; top: 0px; 
                    }
                </style>
          </head>  
          <body>
            <div id="content">
            <iframe width="100%" height="100%" frameborder="0" src="http://yourMainSite.com/dataDependentPage.php" ></iframe>
            TESTING
            </div>
          </body>  
         </html>
        

        【讨论】:

          【解决方案7】:

          HttpCookie.Domain Property 可能会有所帮助。

          摘录:

          MyCookie.Domain = domainName;
          

          【讨论】:

            猜你喜欢
            • 2021-09-18
            • 2013-02-02
            • 1970-01-01
            • 2017-08-09
            • 1970-01-01
            • 1970-01-01
            • 2011-10-10
            • 2011-02-20
            相关资源
            最近更新 更多