我有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');
}
}
}
答案 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,可以退出任何用户)