仅当用户单击注销或用户删除浏览器历史时,WordPress才会注销

时间:2017-11-28 作者:I am the Most Stupid Person

这是我的项目的主要要求。

用户登录后,只有在用户单击“注销”按钮或用户删除浏览器历史记录时,才能注销。

浏览器关闭后,计算机重新启动,更改IP地址should NOT logout the User.

WordPress可以这样做吗?是否有过滤器、行动挂钩?

3 个回复
最合适的回答,由SO网友:Jacob Peattie 整理而成

您可以使用auth_cookie_expiration 筛选以更改cookie WordPress集的过期时间以记住您。除非用户更改浏览器或清除其cookie(通常是清除历史记录的一部分),否则用户不会注销。

问题是,您无法将cookie设置为永不过期,因此您必须在遥远的将来设置日期。你最多只能去2038年1月19日,因为Year 2038 problem.

的值auth_cookie_expiration 过滤器已添加到time() 因此,如果要为cookie设置尽可能长的时间,则需要获得最大值(2147483647 根据this) 并减去time():

function wpse_287104_cookie_expiration( $length ) {
    return time() - 2147483647;
}
add_filter( \'auth_cookie_expiration\', \'wpse_287104_cookie_expiration\' );

SO网友:nicolas181070

我在wordpress函数中使用了这段代码。php,用于在woocommerce中付款后自动注销客户/用户或关闭浏览器

function logged_in( $expirein ) {
   return 6; // 6 in seconds
}
add_filter( \'auth_cookie_expiration\', \'logged_in\' );

function wp_logout2() {
    wp_destroy_current_session();
    wp_clear_auth_cookie();

    /**
     * Fires after a user is logged-out.
     *
     * @since 1.5.0
     */
    do_action( \'wp_logout2\' );
}

function wpse108399_change_cookie_logout( $expiration, $user_id, $remember ){
    if( $remember && user_can( $user_id, \'administrator\' ) ){
        $expiration = 604800;// yes, I know this is 1 minute
    }
    if( $remember && user_can( $user_id, \'editor\' ) ){
        $expiration = 604800;// yes, I know this is 1 minute
    }
    }
    return $expiration;
}
add_filter( \'auth_cookie_expiration\',\'wpse108399_change_cookie_logout\', 10, 3 );

/**
 * Bypass logout confirmation.
 */
function iconic_bypass_logout_confirmation() {
    global $wp;

    if ( isset( $wp->query_vars[\'customer-logout\'] ) ) {
            wp_redirect( str_replace( \'&\', \'&\', wp_logout_url( wc_get_page_permalink( \'myaccount\' ) ) ) );
        exit;
    }
}

add_action( \'template_redirect\', \'iconic_bypass_logout_confirmation\' );
这段代码的一部分是为了增加wordpress管理员或其他类型用户的过期时间

function wpse108399_change_cookie_logout( $expiration, $user_id, $remember ){
    if( $remember && user_can( $user_id, \'administrator\' ) ){
        $expiration = 604800;// yes, I know this is 1 minute
    }
    if( $remember && user_can( $user_id, \'editor\' ) ){
        $expiration = 604800;// yes, I know this is 1 minute
    }
    }
    return $expiration;
}
add_filter( \'auth_cookie_expiration\',\'wpse108399_change_cookie_logout\', 10, 3 );

SO网友:Aniruddha Gawade

您可以尝试在用户使用登录时设置Cookiewp_set_auth_cookie.

类似于:

add_action( \'wp_login\', function($login, $user){
    wp_set_auth_cookie($user->ID, TRUE);
}, 10, 2 );
注意:未测试或尝试代码。请检查错误。

结束

相关推荐

Contact Form Security

在Wordpress中构建我自己的联系人表单。除了典型的电子邮件etc验证和可能的验证码之外,我还需要考虑任何其他安全步骤。我没有向数据库发送任何数据。