Простой код для истечения срока действия куки Drupal? - PullRequest
4 голосов
/ 03 июня 2010

Одним простым щелчком мыши этот простой скрипт выполнит мульти-выход из системы:

Мудл

Elgg

2 MyBB и

(не) Drupal.

    <?php
setcookie( 'Elgg', '', -3600, '/', '.domain.com', false, false);
setcookie( 'http_auth_ext_complete', '1', -3600, '/d/', '.domain.com', false, false);
// setcookie( 'http_auth_ext_complete', '1', -3600, '/d/', 'domain.com', false, false); 
setcookie( 'mybbuser', '', -3600, '/', '.domain.com', false, false);
setcookie( 'mybbuser', '', -3600, '/bb/', '.domain.com', false, false);

   // unset all 3 Moodle cookies, the lazy way
    if (isset($_SERVER['HTTP_COOKIE'])) {
        $cookies = explode(';', $_SERVER['HTTP_COOKIE']);
        foreach($cookies as $cookie) {
            $parts = explode('=', $cookie);
            $name = trim($parts[0]);
            setcookie($name, '', time()-1000);
            setcookie($name, '', time()-1000, '/');
        }
    }

    ?>

Это работает на четырех сайтах, но куки Drupal не будут закрываться. Как я могу сделать то же самое с Drupal?

Примечание: Drupal использует «host» вместо «domain», ни с, ни с «.» работает до сих пор.

Спасибо.

EDIT: Я уверен, что файл cookie дважды имел «Host domain.com» и при другом входе в систему использовался более стандартный формат «Домен .domain.com»

Срок действия файла cookie с именем "http_auth_ext_complete" истекает , и я все еще вошел в систему. Drupal использует второй файл cookie с идентификатором сеанса в качестве имени файла cookie + в таблице базы данных сеанса есть соответствующая запись, также.

1 Ответ

4 голосов
/ 03 июня 2010

Имя файла cookie сеанса, используемого Drupal, не является константным, а построено на основе хеша MD5 домена cookie определенной установки Drupal - см. conf_init() в файле bootstrap.inc для детали (хэширование происходит в последней строке функции).

Этот сеансовый cookie-файл - тот, от которого вам нужно избавиться, чтобы обеспечить выход из системы. Если предполагается, что ваш скрипт работает только для конкретного экземпляра Drupal, вы можете настроить его так, чтобы он использовал конкретное имя файла cookie сеанса (прервется при изменении домена cookie). Если это предназначено для более общего использования, вам нужно придумать динамическую версию, которая имитирует способ, которым Drupal генерирует имя, то есть 'SESS'. md5 ([cookie_domain]), с некоторыми сложностями в случае SSL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...