【问题标题】:HTTP session between multiple sites多个站点之间的 HTTP 会话
【发布时间】:2011-06-19 19:53:45
【问题描述】:

有没有办法以某种方式修改 HTTP 请求(添加 cookie、HTTP 请求参数或其他任何内容),以便在用户移动到位于一个完全不同的站点时保持 HTTP 会话不同的域?

【问题讨论】:

  • 这只是将会话 ID 与请求一起传递吗?
  • 这也叫“单点登录”
  • @powtac:会话不只是存储身份验证信息,没有任何关于身份验证的说明。

标签: http session cross-domain


【解决方案1】:

如果您有不同的域,您也许可以使用子域,因为如果 cookie 域是 .bar.com,foo.bar.com 和 toto.bar.com 可以共享 cookie。

如果您无法使用子域,您可以尝试通过在第一个域上使用 代理 来获取域或子域的工作配置。在 toto.bar.com 上拥有代理 toto.com 可以帮助您共享 .bar.com 会话 cookie。如果您这样做,请注意不要构建开放代理。这意味着您的第一台服务器也将获得 100% 的流量。

如果上述方法都不适合,您将需要 SSO 解决方案,并由第三方共享身份验证数据。但是 SSO 仅用于共享标识部分,而不是会话数据。

在 SSO 解决方案之前,有一个简单的解决方案,即具有相同的标识/身份验证后端(例如 openLDAP)。但这只会让你有一个统一的密码,而不是共享连接/断开状态(这是 SSO 工作)。

如果您可以在服务器端处理会话数据共享,则您必须在 2 个站点上处理与同一个人关联的 2 个不同会话的同步。这种与唯一标识符的关联是 SSO 为您提供的。这是一件复杂的事情。

现在真正重要的问题是您想在这两个网站之间分享哪些内容?如果是颜色主题等用户偏好,您可能会考虑在应用程序的 js 环境中为您提供一些用户设置的 CROS 或 JSONP 调用,您甚至可以进行一些 ajax 查询以将这些设置保存在每个应用程序,这是一种在 2 个应用程序之间共享公共数据的方法,但不要将其用于安全数据。

【讨论】:

    【解决方案2】:

    您必须在这里在两个不同的服务器之间传输会话数据才能发挥作用;除非您可以访问两个域/服务器并创建一些服务器端来实现这一点,否则这是不可能的。即使这样,它也只适用于您可以控制的特定服务器。

    无法从您无法控制的服务器中获取会话数据。

    【讨论】:

    • 问题不在于服务器端,服务器端我可以处理。问题是关于客户端的
    • 我的错误。请参阅以下帖子:stackoverflow.com/questions/511541/…。第二条评论提供了单点登录服务的解释。但是,这仍然是服务器端的;老实说,我不认为您可以在客户端做很多事情,因为大多数涉及实际会话数据的交互无论如何都发生在服务器端。又名您的解决方案首先可以是纯粹的服务器端。
    猜你喜欢
    • 1970-01-01
    • 2010-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多