【问题标题】:How do I get session_id() from cURL如何从 cURL 获取 session_id()
【发布时间】:2012-01-20 13:14:05
【问题描述】:

我有几个关于 cURL 的问题:

  1. 我需要将session_start() 与 cURL 一起使用吗?

  2. 如果没有,我如何从 cURL 获取 session_id()

  3. session_id() 是什么时候生成的?

  4. 初始化 cURL 会话 (curl_init) 和执行 cURL 会话 (curl_exec) 有什么区别?

【问题讨论】:

  • 你想完成什么? PHP 会话和 cURL 之间没有太大关系。
  • 你能解释一下你想要完成什么吗?从您在问题中暗示的意义上说,会话和 cURL 没有任何共同点。
  • 我正在尝试在两个站点之间共享 session_id。例如,将站点 A 的会话 id 发送到站点 B(也将登录到站点 B)

标签: php session post curl


【解决方案1】:

默认情况下,php session 是在 cookie 中传输的,如果你通过 cURL 获取 web,并尝试访问同一 web 的另一个部分,那么你必须添加从 cURL 获取的 session

【讨论】:

    【解决方案2】:

    对于将用户从一个站点转移到另一个站点并仍保持其“登录”状态的问题,您可能需要考虑另一种解决方案。

    我发布了对您可能想查看的类似主题的回复:Session lost when switching from HTTP to HTTPS in PHP

    简而言之,您可以创建一个哈希键,将用户重定向到站点 B,查找哈希键,如果他们排队,则将用户登录到站点 B。

    【讨论】:

      【解决方案3】:

      首先,会话和 cURL 是完全不同且不相关的东西。会话就像当前用户的服务器端缓存一样。 cURL 是一种在 PHP 中发送 HTTP 请求的方式,例如 GET 和 POST。某些 API 需要使用 cURL 从您自己的 PHP 脚本/代码中与它们进行交互。

      session_id() 函数用于获取或设置当前用户的当前会话 ID。例如,如果您想将会话 id 设置为 7,您可以调用

      session_id(7);
      session_start();
      

      如果你想获取会话 id,你可以调用

      session_start();
      $CurrentSessID = session_id();
      

      会话 id 是在您调用 session_start() 时生成的,除非您在调用 session_start() 之前自行设置。

      【讨论】:

        【解决方案4】:

        cURL 是一个用于建立与服务器的连接的库(就像您的 Web 浏览器一样)并且没有 session_id 可言(因为它只是检索客户端看到的内容,而 session_id() 将是一种服务器端方法) .

        话虽如此,通常会话 ID 可以在请求的标头中找到,例如 Set-Cookie 标头(或有时在 URL 本身中)。因此,如果您需要确定会话,我会考虑使用 cURL 的 Cookie Jar 功能,或者确保检索 with 标头的内容,以便您可以查看 Set-Cookie 值。

        跟进:

        • curl_init 正在建立一个新的 cURL 请求。基本上,它会创建一个新的 cURL 实例,然后您可以使用众多 curl_setopt 设置中的任何一个进行配置。
        • curl_exec 是根据您的配置执行 cURL 请求并返回结果。根据您的设置,这可能是您要查找的实际内容、一组标题、单个状态结果或其他值。

        <?php
          // create a new instance of curl we can configure
          $curl = curl_init('http://google.com');
        
          // begin configuring that instance
          curl_setopt($curl, CURLOPT_COOKIE, 'PHPSESSID=12345ABCDE67890');
        
          // now fire off the result, with the specified cookie attached
          // (in this case, it's fetching google.com with a cookie named PHPSESSID
          // and a value of 12345ABCDE67890)
          $result = curl_exec($curl);
        

        【讨论】:

        • 问题,我使用 CURLOPT_COOKIEJAR 和 CURLOPT_COOKIEFILE 选项将 cookie 数据保存到文件中。我看到 PHPSESSID 也保存在文件中,我如何读回该数据(不使用 fopen 或类似的东西)
        • @user765368: 除非你连续发出请求,否则 cookiejar 可能不是最好的选择(如果你想要立即获得价值,它可能也不是最好的方法,但我没有也不知道你的意图)。也就是说,查看CURLOPT_HEADER,然后您可以从响应中解析Set-Cookie,并获取本质上将存储在cookiejar 文件中的内容。
        • 好的,我使用了 CURLOPT_HEADER。但是如何获取标头中发送的 PHPSESSID cookie?
        • @user:将整行粘贴到这里,我会为你创建一个方法。
        猜你喜欢
        • 2015-12-05
        • 1970-01-01
        • 2017-08-04
        • 2014-11-11
        • 2021-04-13
        • 2017-07-14
        • 1970-01-01
        • 1970-01-01
        • 2021-04-06
        相关资源
        最近更新 更多