You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WordPress自动登录后访问指定页自动登出功能代码异常排查

问题原因分析
  • 跨请求状态丢失:你定义的$autologin是函数内局部变量,自动登录逻辑执行完后直接跳转终止了本次请求。WordPress每个页面请求都会重新触发init钩子执行该函数,跳转后的新请求里$autologin会重新初始化,根本继承不到之前的赋值,甚至会因未定义抛出PHP通知。
  • 条件判断语法错误:自动登出的条件中误用了赋值运算符=而非比较运算符==,$autologin = true逻辑永远返回真,完全起不到校验作用。
  • 变量赋值顺序错误:$autologin = true写在了跳转逻辑之后,即使不考虑跨请求问题,也无法在本次请求后续逻辑中生效。
修复方案

核心是要通过跨请求可读取的存储介质保存「用户为自动登录」的状态,推荐用Cookie实现,改后代码如下:

/* AUTO LOGIN / LOGOUT */
function autologinout() {
    // Autologin
    if( isset($_GET['username']) ) {
        // 对输入参数做过滤,避免注入风险
        $username = sanitize_text_field($_GET['username']);
        $user = get_user_by('login', $username);

        if ( !is_wp_error( $user ) && in_array( 'customer', (array) $user->roles ) ) {
            wp_clear_auth_cookie();
            wp_set_current_user( $user->ID );
            wp_set_auth_cookie( $user->ID );
            // 设置自动登录标记Cookie,有效期默认1天,可自行调整
            setcookie( 'is_auto_login', '1', time() + 86400, COOKIEPATH, COOKIE_DOMAIN );
            wp_redirect( '/lovelists/toon-lovelist/' );
            exit();
        }
    }

    // Autologout
    $current_path = $_SERVER['REQUEST_URI'];
    $target_paths = ['/lovelists/maak-lovelist/', '/lovelists/login/'];
    if ( 
        is_user_logged_in() 
        && isset($_COOKIE['is_auto_login']) && $_COOKIE['is_auto_login'] === '1'
        && in_array($current_path, $target_paths)
    ) {
        wp_clear_auth_cookie();
        wp_logout();
        // 清除自动登录标记
        setcookie( 'is_auto_login', '', time() - 3600, COOKIEPATH, COOKIE_DOMAIN );
    }
}

add_action( 'init', 'autologinout' );

注意:当前直接通过GET参数传用户名实现自动登录存在极高安全风险,任何人都可以伪造参数登录任意客户账号,建议额外增加加密签名校验逻辑,验证参数合法后再执行自动登录。

内容的提问来源于stack exchange,提问作者BarrieO

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 00:54:03