Joomla - вход в систему гостевого пользователя по сценарию - PullRequest
0 голосов
/ 05 апреля 2011

ОБНОВЛЕНИЕ: Я обнаружил ошибку 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, '/');

1 Ответ

1 голос
/ 06 апреля 2011

Ух, интересная проблема, я предполагаю, что вы используете XAMPP из-за домена. Первое, что я вижу, что может вызвать проблему - это редирект перед передачей куки.

//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, '/');

Должно быть:

setcookie($cookie[0], $cookie[1], 3600*24, '/');
header("location:  http://localhost/index.php?option=com_k2&view=itemlist&layout=category&task=category&id=1&Itemid=158");

Еще одна вещь, которую я бы сделал, - это не указывать путь к cookie. Я знаю, что в прошлом у меня были проблемы с путями XAMPP, которые не работали так, как я думал. Попробуйте использовать:

setcookie($cookie[0], $cookie[1], 3600*24);
...