ОБНОВЛЕНИЕ: Я обнаружил ошибку IIS, которая может вызывать проблему.См. Этот пост IIS и nph .
_________________ Оригинальный вопрос _______________________________________________________________________________
У меня есть пользователь Guest Joomla, у которого есть доступ к менее частной, но все же частной части моего веб-сайта.Я хочу, чтобы некоторые пользователи, имеющие доступ по специальной ссылке, содержащей хэш, могли автоматически входить в систему с учетной записью гостя с ограниченным доступом.
Для этого я следую сообщению Брента Фриара Ведение журналапри использовании cURL .
Части процесса работают.
- Я могу сделать запрос cURL, очистить значение токена.
- После запуска сценария я могу просмотреть таблицу сеансов Joomla и увидеть запись для моего гостевого пользователя..
- Когда я печатаю значение cookie непосредственно перед тем, как его установить - оно совпадает с cookie в таблице сеансов.
Однако, когда я пытаюсь перейти к областисайт, к которому пользователь должен иметь доступ, я перенаправлен на экран входа в систему.Когда я проверяю файлы cookie в моем браузере, это не тот файл cookie, который напечатан в сценарии.Затем, если я снова проверяю таблицу сеансов, я вижу, что новый файл cookie связан с новым анонимным сеансом.
Почему файл cookie, установленный в setCookie (), не сохраняется?
Вот мой код:
$uname = "DocGuest";
$upswd = "pass";
//This is the URL of the normal login form on the website
$url = "http://localhost/index.php?option=com_content&view=article&id=115&Itemid=283";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url );
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE );
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE );
curl_setopt($ch, CURLOPT_COOKIESESSION, TRUE );
curl_setopt($ch, CURLOPT_COOKIEJAR, realpath('./cookie.txt'));
curl_setopt($ch, CURLOPT_COOKIEFILE, realpath('./cookie.txt'));
curl_setopt($ch, CURLOPT_HEADER, TRUE );
$ret = curl_exec($ch);
if (!preg_match('/name="([a-zA-z0-9]{32})"/', $ret, $spoof)) {
preg_match("/name='([a-zA-z0-9]{32})'/", $ret, $spoof);
}
$postfields = array();
$postfields['username'] = $uname;
$postfields['passwd'] = $upswd;
$postfields['lang'] = 'en';
$postfields['option'] = 'com_user';
$postfields['task'] = 'login';
$postfields[$spoof[1]] = '1';
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postfields);
$ret = curl_exec($ch);
// Get logged in cookie and pass it to the browser
preg_match('/^Set-Cookie: (.*?);/m', $ret, $m);
$cookie=explode('=',$m[1]);
print_r($cookie); //Cookie matches session table here?
//header("location: http://localhost/index.php?option=com_k2&view=itemlist&layout=category&task=category&id=1&Itemid=158");
setcookie($cookie[0], $cookie[1], 3600*24, '/');