为一个用户设置较短的自动注销时间

时间:2015-01-28 作者:cogdog

我正在创建一个网站,通过自动将访问者登录到一个普通帐户,我秘密地为访问者提供了创作角色的功能;他们从未看到管理栏,并且无法看到仪表板(使用删除仪表板访问插件)。

一切都很好,除了我想有一个很短的时间内,如一个小时后自动注销网站。我一直在尝试这种方法https://wordpress.stackexchange.com/a/51887/14945 这和其他方法通过更改所有用户的auth\\u cookie\\u过期时间来工作,而不是我想要的(管理员和编辑器需要常规设置)。

我调用了在其他地方使用的函数,以验证当前用户是通用帐户(登录名=\'收集器\')

function trucollector_check_user( $allowed=\'collector\' ) {
    // checks if the current logged in user is who we expect
    global $current_user;
    get_currentuserinfo();

    // return check of match
    return ( $current_user->user_login == $allowed );
}
这是我的cookie更改功能

function trucollector_change_cookie_logout( $expiration, $user_id, $remember ) {
    return $remember ? $expiration : 3600;
}
我一直坚持的是在哪里调用add\\u过滤器,在那里我可以检查正确的用户;我尝试在after\\u setup\\u主题的操作中加入一个调用的函数

add_action(\'after_setup_theme\', \'trucollector_shorten_cookie\');

function trucollector_shorten_cookie() {
        // change to short auto logout time
        if ( trucollector_check_user() ) {
            add_filter( \'auth_cookie_expiration\', \'trucollector_change_cookie_logout\', 99, 3 );
        }

}
当我检查浏览器中的cookie时,似乎有一个较短的cookie集,但它似乎没有注销我的来宾用户。

很有可能我的逻辑漏掉了什么。。。。

2 个回复
SO网友:user6552940

一种方法是通过以下方式记录用户登录的时间:

function user_last_login($user_login, $user) {
   update_user_meta($user - > ID, \'last_login\', time());
}
add_action(\'wp_login\', \'user_last_login\', 10, 2);
然后检查时间是否已过:

add_action(\'get_header\', \'processOnPageLoad\', 1 );
add_action(\'admin_init\', \'processOnPageLoad\', 1 );
function processOnPageLoad() {
if( is_user_logged_in() && condition_to_check_required_user ) {
      $last_login_time = get_the_author_meta(\'last_login\');
        $allowed_time = 5 * 60; // This will be 5 minutes in seconds
        if (time() > ($last_login_time + $allowed_time)){
            wp_logout();
            wp_redirect( wp_login_url() );
        }
}
}
请替换所需的条件以检查当前用户,我还没有检查代码,但这应该可以做到。

复制粘贴后,此代码将不起作用。您需要指定要检查的条件。

上述代码将在5 minutes 的登录。

SO网友:Mark Kaplun

你想做的事情不是很安全。您必须记住,internet上没有登录会话这样的事情,必须在发送每个http请求时进行身份验证。身份验证cookie虽然不以简单的纯文本形式携带密码,但可以在任何人想要“登录”您的站点时使用,即使在您过期之后也是如此。

我还没有研究4.1中引入的会话管理,但我看不到它如何克服这一基本现实。

实现所需的唯一方法是更改该用户的密码。您尝试的方法可能适用于不懂技术的人,但如果这对您的业务很重要,那么您需要意识到这不是一种安全的方法。

结束

相关推荐

Wp_logout_url($reDirect)不会注销和重定向()

即使我从wp docs<a href=\"<?php echo wp_logout_url( get_permalink() ); ?>\" title=\"Logout\">Logout</a> 这是用户单击时的输出:Warning: Cannot modify header information - headers already sent by (output started at /usr/home/nakashitabcn.com/web/pedi