如何为登录的管理员用户和登录的非管理员用户设置不同的cookie?

时间:2012-12-03 作者:Francesco

我想通过cookie识别管理员用户和非管理员(但已登录)用户。我需要这个功能,因为我使用超高速缓存(它使用cookies来识别那些在高速缓存中发送页面的人):我想为所有未登录的用户和所有已登录但非管理员的用户提供高速缓存页面。登录的管理员用户将无法获取缓存页面。

2 个回复
最合适的回答,由SO网友:totels 整理而成

您可以使用current_user_can() 要检测登录的用户类型(如果有),请使用setcookie()$_COOKIE 测试和设置必要的Cookie。

function wpse_74742_stop_cache_cookie() {
    if (current_user_can(\'admin\')) {
        if (empty($_COOKIE[\'disable_cache\'])) {
            setcookie(\'disable_cache\', 1);
        }
    }
}
add_action(\'init\', \'wpse_74742_stop_cache_cookie\');
这是一个非常基本的例子。cookie管理有很多细节,因此您可能需要了解一些cookie路径、域和到期时间。

您还可以更好地简单地使用适当的挂钩设置cookie,而不是依赖admin_init 措施:

function wpse_74742_disable_admin_cache() {
    if (empty($_COOKIE[\'disable_cache\'])) {
        setcookie(\'disable_cache\', 1);
    }
}
add_action(\'admin_init\', \'wpse_74742_disable_admin_cache\');

SO网友:fischi

您可以通过以下方式实现此目标

if ( current_user_can( \'manage_options\' ) ) {
    // Code for the administrators
} else if ( is_user_logged_in() ) {
    // Code for other logged in users
} else {
    // not logged in users
}
请确保检查是否只有管理员有能力manage_options. 在默认设置中,这是真的,但您可以更改每个用户组的功能。

如果manage_options 仅管理员不可用,请使用仅管理员具有的其他功能。

结束

相关推荐

Force User Login

很惊讶我没有找到这个问题。我想强制用户在访问任何内容之前登录到该网站。我有这个功能:function av_force_user_login() { global $post; global $pagenow; if ( in_array( $GLOBALS[\'pagenow\'], array( \'wp-login.php\', \'wp-register.php\' ) ) ) { return; }else{