【问题标题】:How to change session expire time in WordPress?如何在 WordPress 中更改会话过期时间?
【发布时间】:2012-02-29 18:32:19
【问题描述】:

如果用户(管理员)在 WordPress 站点中闲置 15 分钟,我希望会话过期,

谁能告诉我 WordPress 的默认会话到期时间是多少?以及如何更改默认过期时间。

【问题讨论】:

    标签: wordpress session


    【解决方案1】:

    只需将此代码添加到主题的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(),codex.wordpress.org/Function_Reference/wp_clear_auth_cookie
    • 完全披露:WordPress core 不使用会话。有些插件可能会。如果您想确定,您必须搜索插件的源代码。我注意到接受答案中的参考是一篇关于控制 PHP 会话持续时间的文章,这不会影响 WordPress 用户的登录状态。
    • 您也可以控制不同角色的访问时间。 if ( user_can( $user_id, 'manage_options' ) ) { $expiration = 2*60*60; }
    • 我相信这个解决方案不会解决问题的“不活动”部分。此方法将更改 cookie 过期时间,但无论用户是否处于活动状态,用户都将被注销。 WP 似乎没有更新用户活动的 cookie 过期时间 - 它在登录时设置一次。
    • 令人惊讶的是 WP 是如何忽视这个问题的,现在,7 年了?
    猜你喜欢
    • 2011-01-20
    • 2016-05-12
    • 2011-03-01
    • 2012-03-06
    • 2017-12-13
    • 1970-01-01
    • 2016-10-26
    • 2015-01-10
    • 2019-05-27
    相关资源
    最近更新 更多