3

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

http://myapi.com/login.php?email=mail@mail.com&password 

例如。

当电子邮件和密码正确时,我设置了一些会话变量并开始一个会话:

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

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

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

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

谢谢!

4

2 回答 2

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

然后你做下一个请求告诉 cUrl发回cookie

curl -b cookies.txt http://myapi.com/login.php?email=mail@mail.com&password 

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

于 2012-10-05T19:16:03.843 回答
2

需要一个饼干罐...

http://curl.haxx.se/libcurl/php/examples/cookiejar.html

浏览器 cookie != 您的代码(curl 客户端)cookie。

现在我脑子里卡着曲奇怪兽的歌……

于 2012-10-05T19:15:51.120 回答