cookie 过期时调用“wp_logout”(php 或 javascript)

Posted

技术标签:

【中文标题】cookie 过期时调用“wp_logout”(php 或 javascript)【英文标题】:Call 'wp_logout' when cookie expires (php or javascript) 【发布时间】:2022-01-11 22:19:51 【问题描述】:

如果我的wordpress_logged_in_HASH cookie 过期,我正在寻找一种方法来调用wp_logout(服务器端)。不幸的是,到目前为止我找不到任何解决方案。对***和google做了很多研究,但还是没有做。 有没有人有一些建议或想法如何做到这一点?

服务器端我可以检查 cookie 是否以$_SERVER['HTTP_COOKIE'] 退出。变量在我的共享服务器上退出,这有效。但是当cookie过期时如何自动运行wp_logout?也许通过一些javascript

if(strpos($_SERVER['HTTP_COOKIE'], 'wordpress_logged_in') == true)
    echo "Login cookie exists!<br>";
    var_dump($_SERVER['HTTP_COOKIE']);
    //echo($startTime = microtime(true));
 else
    echo "Login cookie not exists!";
    var_dump($_SERVER['HTTP_COOKIE']);
    

【问题讨论】:

$_COOKIE['wordpress_logged_in'] 可能会更安全一些。不过也不是那么安全。应该检查服务器端的会话,而不是 cookie $_COOKIE['wordpress_logged_in'] 不可用。实际上$_COOKIE 总是空的。你知道,为什么它是空的吗? 【参考方案1】:

只需更改会话过期时间,如 mentioned,通过添加主题的 functions.php 类似:

add_filter('auth_cookie_expiration', 'my_expiration_filter', 99, 3);
function my_expiration_filter($seconds, $user_id, $remember)

    //if "remember me" is checked;
    if ( $remember ) 
        //WP defaults to 2 weeks;
        $expiration = 14*24*60*60; //UPDATE HERE;
     else 
        //WP defaults to 48 hrs/2 days;
        $expiration = 2*24*60*60; //UPDATE HERE;
    

    //http://en.wikipedia.org/wiki/Year_2038_problem
    if ( PHP_INT_MAX - time() < $expiration ) 
        //Fix to a little bit earlier!
        $expiration =  PHP_INT_MAX - time() - 5;
    

    return $expiration;


令人惊讶的是,WordPress 根本不使用PHP 会话。它只使用cookies。并且它使用了一些带有散列名称的名称。

所以不要直接与他们混淆,并使用 WordPress 的方式使用上面的过滤器。

或者通过调用WordPress API。例如。如果要注销当前用户,可以拨打wp_clear_auth_cookie: http://codex.wordpress.org/Function_Reference/wp_clear_auth_cookie

【讨论】:

谢谢,但用户应该在不重新加载页面的情况下自动注销。而且你的代码不符合这个要求。还有什么想法吗? @cr4nk 这听起来像XY Problem;一旦时间到期,无论是否重新加载页面,WordPress都会注销用户;似乎您并不关心 WordPress 会自动注销,而您只是想以某种方式确保调用 wp_logout(可能您需要触发一些注销操作)。

以上是关于cookie 过期时调用“wp_logout”(php 或 javascript)的主要内容,如果未能解决你的问题,请参考以下文章

cookie的操作

cookie.setMaxAge();如何设置这个cookie永不过期?

Thinkphp设置登陆过期时间怎么写

js cookie设置最大过期时间 Infinity

在使用 p:commandButton 导航时调用 f:viewAction 中的操作

如何设置cookie的过期时间