Php 使用cookie请求时未经授权的访问

Php 使用cookie请求时未经授权的访问,php,authentication,curl,cookies,login,Php,Authentication,Curl,Cookies,Login,我正在尝试访问一个页面,比如http://www.domain.com/profile。操作和登录URL是相同的,我正在尝试将cookies保存到http://www.example.com/cookies.txt用于身份验证。以下是我正在使用的代码: $loginURL = 'http://www.domain.com/login'; $COOKIE_FILE = 'http://wwww.example.com/cookies.txt'; $postValues = array( '

我正在尝试访问一个页面,比如
http://www.domain.com/profile
。操作和登录URL是相同的,我正在尝试将cookies保存到
http://www.example.com/cookies.txt
用于身份验证。以下是我正在使用的代码:

$loginURL = 'http://www.domain.com/login';
$COOKIE_FILE = 'http://wwww.example.com/cookies.txt';
$postValues = array(
    'username' => 'myusername',
    'password' => 'mypassword'
);
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $loginURL); 
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($postValues));
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_COOKIEJAR, $COOKIE_FILE);
curl_setopt($curl, CURLOPT_USERAGENT, 'Chrome/35.0.2309.372');
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_REFERER, $loginURL); 
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
curl_exec($curl);
if(curl_errno($curl)){throw new Exception(curl_error($curl));}

// now we are logged in, attempt to access a password-protected page
curl_setopt($curl, CURLOPT_URL, 'http://www.domain.com/profile');
curl_setopt($curl, CURLOPT_COOKIEJAR, $COOKIE_FILE);
curl_setopt($curl, CURLOPT_USERAGENT, USER_AGENT);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
echo curl_exec($curl);

看起来curl请求成功了,但是我收到了来自服务器的回音,说“未经授权的访问”。我认为我的cookies系统工作不正常?我该怎么查呢?如何修复它?

将CURLOPT_COOKIEFILE设置为与CURLOPT_COOKIEJAR相同的路径。curl从文件中读取并写入jar


ETA:您的脚本无法工作的一个可能原因是您没有在第二个请求中发送来自第一个请求的cookie数据

因此,实际的答案是通过CAS登录,这需要更复杂的身份验证过程。然而,我上面的代码不正确地使用了
CURLOPT\u COOKIEFILE
CURLOPT\u COOKIEJAR
,因此在我进行了这些修复后,我发现我需要对该方法进行重新修改。

我尝试了这个方法,但没有成功。我应该可以通过
echo FILE\u get\u contents($COOKIE\u FILE)
查看我的$COOKIE\u文件内容,但它是空的。您能解释一下不发送COOKIE数据的意思吗?我该怎么做?我只是试着改写第一句话。您需要cookie文件来读取该文件。但是我不知道你为什么不能创建这个文件。也许先试试本地文件?或者将CURLOPT_VERBOSE与CURLOPT_STDERR结合使用。