2017-07-06 58 views
1

我有drupal登錄模塊,它會觸發每當用戶從WordPress的網站登錄,它會被觸發並登錄到網站,但是當用戶從drupal註銷時,它不會從WordPress註銷。請檢查下面的代碼,並指導我解決這個問題如何從php中的相同服務器銷燬會話和cookie?

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

你不能修改從一個域的另一個域的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 protected]

現在你可以從你的drupal做curl請求到這個url。

偏離航向這是不是很安全(可以註銷任何用戶,如果他們有電子郵件ID)

+0

是我使用同一臺服務器的兩個站點。 wordpress會在網站根目錄下的文件夾 – mike

+0

用戶名與wordpress和drupal不同 – mike

+0

當我註銷bcoz的時候得到http 500錯誤需要一次包含路徑 – mike