【问题标题】:I can get the PHP session variables using the GET method using CURL?我可以使用 CURL 的 GET 方法获取 PHP 会话变量吗?
【发布时间】:2016-03-11 06:55:29
【问题描述】:

我有 2 个 .php 文件

第一个php创建会话:

<?php
session_start();
$_SESSION['ID']  = '1';
$_SESSION['NAME'] = 'ALIAS';
$_SESSION['TIME']   = time();
print_r($_SESSION);

第二个文件具有相同的会话,如果使用 GET 方法从同一浏览器调用它,则应返回会话的值:

<?php
session_start();
if($_SERVER['REQUEST_METHOD'] == "GET"){
    $key = $_GET["access_token"];
    if($key=="b8bc45179e0c022a0a5e7738356549a3ebf3788c"){
        $json = array("status" => 1, "msg" => $_SESSION['NAME']);
    }else{
        $json = array("status" => 0, "msg" => "ACCESS ERROR");
    }
    header('Content-type: application/json');
    echo json_encode($json);
}

当我从浏览器导航栏调用时成功如下:

https://test.com.mx/p_session.php?access_token=b8bc45179e0c022a0a5e7738356549a3ebf3788c

我明白了:

{"status":1,"msg":ALIAS}

但是当来自第三方的脚本时:

<?php 
$ch = curl_init('https://test.com.mx/p_session?access_token=b8bc45179e0c022a0a5e7738356549a3ebf3788c');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);     
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); 
$response = curl_exec($ch);
curl_close($ch);
print_r($response);

来自同一浏览器的调用:

{"status":1,"msg":null}

使这成为可能的现有方法?

【问题讨论】:

  • 我不认为CURL 可以在当前方法中进行会话。试试print_r($_SESSION);;或者您可以尝试找出您已经设置的会话 ID 并将其与 CURL 一起发送。
  • curl 不会重复使用您的会话 cookie,您必须手动附加它们
  • 看起来第 3 方脚本正在向第二个 PHP 文件发送请求,但会话变量正在第一个 PHP 文件中设置。因此,脚本将无法访问第一个 PHP 文件中设置的值。
  • 我很好奇的是为什么它返回状态 1,因为查询字符串中的键名不正确......即您提供的 URL 拼写错误 access_token 作为 acces_token。我知道这对你的问题没有帮助,但我确实觉得它很有趣。
  • 我尝试在同一个浏览器中使用我的应用程序数据进行第三次应用程序登录

标签: php session curl oauth-2.0


【解决方案1】:

当您在 PHP 中使用会话时,会为客户端浏览器设置一个会话 cookie,其中包含一个会话 ID。 默认情况下,Curl 不保留 cookie,因此当您调用第二个文件时,它无法访问您的 cookie。

首先,您应该使用 curl 调用第一个 url,获取它返回给您的 cookie,然后使用这些 cookie 请求第二个 url。此外,你甚至没有首先调用第一个文件,所以它甚至没有返回你一个 cookie。 (即使是这样,但如果没有选项,您将无法保持这种状态)

示例选项:

curl_setopt( $curl_handle, CURLOPT_COOKIESESSION, true);
curl_setopt( $curl_handle, CURLOPT_COOKIEJAR, $cookie);
curl_setopt( $curl_handle, CURLOPT_COOKIEFILE, $cookie);

你应该用 curl 调用第一个 url,保留 cookie,然后调用第二个 url。

相关:PHP Curl And Cookies

google "curl php cookie" 和类似的更多,但基本上就是这样。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-09
    • 1970-01-01
    相关资源
    最近更新 更多