与 cURL 的会话

Dev*_*s50 4 php curl get request

我想我有一个非常简单的问题。我目前正在开发一个 API,您必须先登录才能使用它。登录通过 http 请求进行,因此要登录,您将访问

http://myapi.com/login.php?email=mail@mail.com&password 
Run Code Online (Sandbox Code Playgroud)

例如。

当电子邮件和密码正确时,我设置一些会话变量并启动会话:

session_start();
$_SESSION['idUser'] = $row['id'];
$_SESSION['email'] = $row['email'];
print(json_encode(array("authenticated" => true)));
Run Code Online (Sandbox Code Playgroud)

但是,当我访问 api 并通过 cURL 从终端发出请求(而不是登录)时,它说我没有获得授权,而我第一次执行了登录请求。在另一个页面上的每个 api 调用中,我都会检查会话变量。如果设置了,则用户已登录:

function checkSession()
{
    session_start();
    if(!isset($_SESSION['idUser']) || !isset($_SESSION['email']))
    {
            print json_encode(array("error" => "Not authorized"));
            exit();
    }
}
Run Code Online (Sandbox Code Playgroud)

为什么说我没有权限?当我从网络浏览器访问页面时,一切正常。

谢谢!

mba*_*emy 7

这可能是因为您的 PHP 会话代表您使用 cookie 将会话存储在用户的浏览器上。这就是您的 php 应用程序在每次用户向您的 PHP 页面发出 HTTP 请求时识别用户的方式。

您必须使用 cUrl 的“cookie”选项。

基本上,您首先要登录并使用 with 存储会话 cookie

curl -c cookies.txt http://myapi.com/login.php?email=mail@mail.com&password=yourpassword
Run Code Online (Sandbox Code Playgroud)

然后你执行下一个请求,告诉 cUrl 发回cookie

curl -b cookies.txt http://myapi.com/login.php?email=mail@mail.com&password 
Run Code Online (Sandbox Code Playgroud)

您将看到您的 cookie 以纯文本形式存储在 cookies.txt 中