2015-10-21 82 views
2

嗨,我是新来的wordpress。在注销之前和管理员登录后设置cookie

我已经研究了很多,但没有成功。我想在登录后管理和退出自定义值之前设置cookie的值NULL。

所以我把下面的代码在WP-包括/ puggable.php =>在功能wp_set_auth_cookie

setcookie("cookieName", '', time() + (1 * 60) , true);

echo "<script>console.log('Cookie must set null')</script>";

但是没有成功,即使在登录注销后cookie值仍然保持不变。

回答

7

从不编辑WordPress的核心文件!如果您有一天更新Wordpress(并且想要解决安全问题),所有修改都将丢失。

您需要做的是使用wp_loginwp_logout操作。您将这两个操作功能都附加在add_action上,以便在这些事件中触发它们。这些功能和add_action调用发生在您的主题的functions.php文件中。作为diziaq在他的回答中指出,你用错setcookie功能

add_action('wp_login', 'add_custom_cookie_admin'); 
function add_custom_cookie_admin() { 
    if(is_admin()) { 
    setcookie('your_cookie_name', 'cookie value', time() + 86400, '/'); // expire in a day 
    } 
} 

注:

所以里面的functions.php,加上这(仅适用于管理员)设置登录cookie的。

,并删除了日志饼干出来:

add_action('wp_logout', 'remove_custom_cookie_admin'); 
function remove_custom_cookie_admin() { 
    setcookie('your_cookie_name', '', time() - 3600); 
} 

同diziaq指出的那样,你需要删除cookie的 - 你不能将其设置为NULL

+0

我无法使用上面的添加功能在WP 4.6.1上设置cookie。我删除了if is_admin条件,并按预期工作。 据我在测试中发现,is_admin检查是不必要的;至少为了我的目的。自定义cookie不会被设置,除非登录成功。 – mingala

+0

@mingala此答案中的'is_admin'检查是针对此问题范围内的特定目的 - OP仅尝试检测管理员登录操作。如果您需要捕获每个使用角色的登录信息,请删除条件。 – vard

2

请阅读文档setcookie函数 - 你用它错了。第四个参数必须是string(但您传递的是bool)。

  1. 设置cookie:

    setcookie("cookieName", "cookieValue", time() + 600, '/');

  2. 要删除对设定有效期限你有饼干过去

    setcookie("cookieName", "anyValue", time() - 1, '/');

你打算成立null到一个cookie是无法访问,因为根据定义一个cookie的值是一个字符串。它可以是空的,但不能是未定义的或为空。