【问题标题】:how to destroy session and cookies from same server in php?如何在php中从同一台服务器销毁会话和cookie?
【发布时间】:2017-07-06 22:40:05
【问题描述】:

我有 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');
        }


    }

}

【问题讨论】:

    标签: php wordpress drupal session-cookies


    【解决方案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(一定要对电子邮件 id 进行 url 编码): https://example.com/api/logout.php?email=email%40gmail.com

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

    现在你可以从你的 drupal 向这个 url 发出 curl 请求。

    当然这不是很安全(如果他们有电子邮件ID,可以注销任何用户)

    【讨论】:

    • 是的,我为两个站点使用相同的服务器。 wordpress 将在站点根目录的文件夹内
    • 用户id与wordpress和drupal不同
    • 当我注销需要包含路径的 bcoz 时出现 http 500 错误
    • 用户 id 与 wordpress 和 drupal 不同,它不会有相同的用户 id
    • 答案已更新为您可以使用的 api 代码。确保更新代码以使用某种安全机制...
    猜你喜欢
    • 1970-01-01
    • 2011-01-15
    • 1970-01-01
    • 1970-01-01
    • 2020-04-27
    • 1970-01-01
    • 2011-03-07
    • 1970-01-01
    • 2012-05-25
    相关资源
    最近更新 更多