【问题标题】:Do POST requests carry PHP session values accross servers?POST 请求是否跨服务器携带 PHP 会话值?
【发布时间】:2012-08-10 04:29:39
【问题描述】:

如果我使用 PHP 向运行包含 session_start() 的代码的远程服务器执行 cURL POST,是否可以在远程访问本地计算机上设置的会话变量?

【问题讨论】:

    标签: php session post curl


    【解决方案1】:

    不,他们没有。即使发送会话 cookie(您可以使用 cURL POST 执行)也会引用仅存在于请求服务器上的会话。

    【讨论】:

      【解决方案2】:

      没有。

      会话变量是特定于服务器的。只有在正确设置会话 ID 并且使用共享会话数据存储(例如 memcached)时,它们才会跨到另一台服务器。

      【讨论】:

        【解决方案3】:

        除非您打开了 PHP trans_sid 选项(坏主意),否则 POST 与会话值无关。这是通过标准 cookie 调节的。

        Cookie 受同域安全设置的约束 - 它们可以在同一域中的主机之间共享(例如 foo.example.com 和 bar.example.com),但亚马逊 cookie 不能与 Yahoo 共享。

        【讨论】:

        • 不完全正确-session.use_trans_sid 关闭并不会禁止 php 使用通过 post 字段在请求中传递的会话 ID。 session.use_only_cookies 是最接近的设置。我相信你知道这一点,但你帖子的大多数读者可能不知道。
        • 您绝对可以手动将会话 ID 插入到查询字符串、隐藏的表单字段、等等等等,但这样做是一个主要的安全漏洞,并且关闭 trans_sid,PHP 将不会接收该会话自动识别。
        • 从 post/get 中的 id 恢复会话,除非您启用 session.use_only_cookies,并且多年来一直如此。试试吧。 pastebin.com/xhYa33Kp
        猜你喜欢
        • 1970-01-01
        • 2013-07-29
        • 2011-05-24
        • 2012-06-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-03-08
        • 1970-01-01
        相关资源
        最近更新 更多