简单的代码到期Drupal cookie?

时间:2010-06-03 01:10:23

标签: drupal cookies

只需单击一下,这个简单的脚本就可以进行多次注销:

的Moodle

埃尔格

2 MyBB's和

(不是)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 cookie不会退出。我怎么能和Drupal一样呢?

注意:Drupal使用'host'而不是'domain',无论是否使用'。'到目前为止工作。

谢谢。

编辑: 我确定cookie两次有“Host domain.com”,而在另一次登录时使用了更标准的格式“Domain .domain.com”

名为“http_auth_ext_complete”的Cookie即将过期,我仍然登录.Drupal使用第二个cookie,会话ID作为Cookie名称+会话数据库表中有匹配的条目,也。。

1 个答案:

答案 0 :(得分:4)

Drupal使用的会话cookie的名称不是常量,而是基于特定Drupal安装的cookie域的MD5哈希构造 - 有关详细信息,请参阅'bootstrap.inc'中的conf_init()(哈希发生)在函数的最后一行)。

此会话cookie是您需要删除以执行注销的cookie。如果您的脚本仅适用于特定的Drupal实例,则可以将其调整为使用特定的会话cookie名称(如果cookie域发生更改,则会中断)。如果它用于更广泛的用途,你需要提出一个动态版本,模仿Drupal生成名称的方式,即'SESS'。 md5([cookie_domain]),在SSL情况下有一些复杂情况。