只需单击一下,这个简单的脚本就可以进行多次注销:
的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名称+会话数据库表中有匹配的条目,也。。
答案 0 :(得分:4)
Drupal使用的会话cookie的名称不是常量,而是基于特定Drupal安装的cookie域的MD5哈希构造 - 有关详细信息,请参阅'bootstrap.inc'中的conf_init()
(哈希发生)在函数的最后一行)。
此会话cookie是您需要删除以执行注销的cookie。如果您的脚本仅适用于特定的Drupal实例,则可以将其调整为使用特定的会话cookie名称(如果cookie域发生更改,则会中断)。如果它用于更广泛的用途,你需要提出一个动态版本,模仿Drupal生成名称的方式,即'SESS'。 md5([cookie_domain]),在SSL情况下有一些复杂情况。