我试图向我的laravel服务器发出curl请求,在该请求中我必须检查我的laravel应用程序的用户是否已登录。我使用这段代码:
$transferAmount = 200;
//set POST variables
$url = URL::route('post-spend-partner');
$fields = array(
'transferAmount' => urlencode($transferAmount),
'cancelUrl' => urlencode(URL::route('get-return-page-example')),
'returnUrl' => urlencode(URL::route('get-return-page-example')),
);
// New Connection
$ch = curl_init();
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0);
curl_setopt($ch, CURLOPT_COOKIESESSION, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $fields);
curl_setopt($ch, CURLOPT_URL, $url);
curl_exec($ch);
curl_close($ch);
在请求的网址中,我只是检查我是否登录,但它总是返回false:
public function postSpendPartner() {
echo "Authenticated? " . (Auth::check() ? 'Yes' : 'No');
}
我确信我已经登录了,如果我尝试使用Ajax完全相同的东西它完全有效!
有谁知道我可以尝试什么来解决这个问题?
祝你好运!
和Fabrice
答案 0 :(得分:1)
一些事实:HTTP是无状态的。需要将会话ID传递给服务器才能继续会话。会话ID(大部分时间)存储在cookie中。 Cookie包含在请求中。
使用cookiejar确实是一种可能的解决方案。它使用Ajax而不是从服务器重新提交请求的事实可能是因为服务器上的会话验证机制:某些会话实现将会话ID锁定到初始IP地址。如果你的cookiejar文件的内容被检出,那可能是罪魁祸首。
除此之外:从服务器通过Curl重新提交请求对我来说是一个严重的代码。一个适当的解决方案是实现诸如OAuth之类的东西。
答案 1 :(得分:0)
尝试使用curl请求将Cookie作为标题发送。
// ...
$cookie_header = "Cookie:";
$headers = [];
foreach($_COOKIE as $key => $val) {
// Do sanitize cookie values
$cookie_header .= " ".$key."=".$value.";";
}
$headers[] = $cookie_header;
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
// ...
您可以从$cookie_header
过滤掉不必要的Cookie值。