我可以使用CURL使用GET方法获取PHP会话变量吗?

时间:2016-03-10 22:17:38

标签: php session curl oauth-2.0

我有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}

存在使这成为可能的方法吗?

1 个答案:

答案 0 :(得分:2)

在PHP中使用会话时,会话cookie将设置为客户端浏览器,其中包含会话ID。 默认情况下,卷曲不会保留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调用第一个网址,保留Cookie,然后拨打第二个网址。

相关:PHP Curl And Cookies

google&#34; curl php cookie&#34;和类似的更多,但这基本上就是它。