如何在PHP中销毁来自同一服务器的会话和cookie?

时间:2017-07-06 13:17:16

标签: php wordpress drupal session-cookies

我有drupal登录模块,当用户从wordpress网站登录时会触发它并触发登录到网站,但是当用户从drupal注销时它不会从wordpress注销。请检查以下代码并指导我解决此问题

function wp_login_user_logout( $account) {          
    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, '/','sitedomain.com');
        }


    }

}

1 个答案:

答案 0 :(得分:1)

您无法从一个域修改其他域的Cookie。

所以我建议你像这样创建一些api。

WordPress安装上的

......

<?php

// file: wp/api/logout.php
require_once("../wp-load.php");


if(empty($_GET["email"])) {
    die('no email given');
}

// get wordpress user_id by email
$email = $_GET["email"];
$user = get_user_by( 'email', $email );
$user_id =  $user->ID;


// get all sessions for user with ID $user_id
$sessions = WP_Session_Tokens::get_instance($user_id);

// we have got the sessions, destroy them all!
$sessions->destroy_all();

print("user logged out.");

现在,如果你像这样访问wordpress的url(请确保url编码电子邮件ID): https://example.com/api/logout.php?email=email%40gmail.com

它将使用电子邮件ID注销用户:email@gmail.com

现在你可以从你的drupal到这个url做curl请求。

偏离课程这不是很安全(如果他们有电子邮件ID,可以退出任何用户)