【问题标题】:PHP read a cookie that is on another domainPHP 读取另一个域上的 cookie
【发布时间】:2010-05-27 09:37:45
【问题描述】:

我有两个域。一个域包含登录脚本。它在登录时创建一个 cookie。另一个域有一个 URL 缩短器。

因此,在具有 URL Shortener 脚本的第二个域中,有一个名为 session.php 的文件。通常我使用$_COOKIE['sessionid'] 来获取会话ID并使用数据库进行匹配。

我现在如何获取会话 ID?我尝试了几种方法,但都没有解决我的问题。

【问题讨论】:

    标签: php cookies


    【解决方案1】:

    出于明显的安全原因,您无法读取属于另一个域的 cookie。不过,您可以跨子域执行此操作。

    为什么不将会话 ID 附加到转发的 URL?

    【讨论】:

    • “将其附加到 URL”是什么意思?
    • @pnm123:作为查询字符串的一部分:http://mysite.com/page.php?sid=A12638BCEF2733
    • 是否有必要根据第二个应用程序中的数据库检查会话 ID?仅检查存储在第一个应用程序的 cookie 中的令牌(在成功登录时创建,在注销时销毁)是否存在还不够?
    【解决方案2】:

    您是否考虑过使用 SSO 实现?

    http://www.jasig.org/cas

    http://en.wikipedia.org/wiki/Single_sign-on

    我们在工作中使用它,太棒了!这意味着我们不必担心这些类型的问题。

    【讨论】:

    • 你连接到 CAS 的用户数据库是什么样的?
    【解决方案3】:

    Cookies 由浏览器发送,并且仅发送到设置 cookie 的域。

    你能做的并不多(意思是什么都没有;))。

    但是,如果您的域是两个不同的子域(例如 login.yourdomain.com 和 shortener.yourdomain.com),您只需相应地设置域名以使 cookie 对所有子域都有效。
    在这种情况下,它将是.yourdomain.com。

    您可能想阅读setcookie() 的文档。


    如果你清楚地描述你想要完成的事情,也许会更好。可能还有另一种不涉及 cookie 的解决方案。

    【讨论】:

    • 有没有办法把它叫回来。就像在第一个域上添加一个文件并从第二个域调用它?
    • @pnm123:添加文件是什么意思?
    • “不多”并不是什么都没有。 ;-)
    • @Felix Kling:比如 call_cookie.php。实际上,我已经尝试过这个。我的意思是在 call_cookie.php 上使用 $_COOKIE['....'] 并使用 file_get_contents() 调用它,但它不起作用。
    • @Felix Kling:我目前在我的网站上使用 .domain.com cookie。
    【解决方案4】:

    就在从登录页面设置 cookie 时 像这样将cookie设置为整个域

    setcookie("c","value",time()*3600*24,"/");
    

    通过这种方式,您可以将 cookie 设置为您的整个域。

    【讨论】:

      【解决方案5】:

      您无法从其他域读取 cookie。
      虽然有几种方法可以传递会话 ID。你可以搜索cross-domain authorization

      最简单的方法是通过查询字符串传递会话 ID

      【讨论】:

        【解决方案6】:

        你不能。 Cookie 绑定到单个域。不过,您可以跨多个子域使用 cookie。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-09-08
          • 2015-03-01
          • 1970-01-01
          • 2016-11-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-07
          相关资源
          最近更新 更多