我被要求在一个网站上添加一种安全机制,在这个网站上,用户只有在登录后设置了cookie,才能访问自己的个人资料,而且最多只能有3个cookie。我在数据库中建立了一个表来存储cookies,这样我就可以对它们进行计数。
我真的不知道WordPress是如何工作的,但我发现我需要编辑主题functions.php
使用文件和添加操作wp_login
. 我编辑了functions.php
文件,添加了操作,请求用户ID,然后返回0
. 我知道这就是wp_get_current_user
应该会起作用,它会回来0
如果没有人登录;但是,用户已登录,但仍不会返回ID。以下是代码:
add_action( \'wp_login\', \'login_cookie\' );
function login_cookie() {
global $wpdb;
$user = wp_get_current_user();
//Get current user
$id = $user->ID;
if(!isset($_COOKIE[\'userCookie\'])) {
// Query the database to see how many cookies they have used
$cookie_count = $wpdb->get_var("SELECT COUNT(*) FROM wp_cookies WHERE user_id=".$id."");
// If the returned value is bigger or equal to 3 than the user cannot login
// they will be logged out, and redirected
if($cookie_count >= 3) {
wp_logout();
wp_redirect("");
}
//Else they can login and they recieve a new cookie, which will get inserted into the database
else {
$value = password_hash($id,PASSWORD_DEFAULT);
setcookie(\'userCookie\', $value, time()+360000*24*100, "", "",false);
$wpdb->insert(
"wp_cookies",
[ \'user_id\'=>$id, \'cookie_value\'=>$value ],
[ \'%d\', \'%s\' ]
);
}
}
}
此外,这只会影响普通用户,而不会影响管理员。有什么想法吗?