jQuery检查wordpress_logged_in cookie

Zet*_*eta 6 cookies wordpress jquery

有一种方法可以使用jquery 检查wordpress cookie wordpress_logged_in吗?

我正在使用cloudflare完全缓存,因此没有办法检查用户是否记录了这个cookie,我尝试使用jquery读取它但看起来受保护且不可见,我只能使用PHP访问它.

以下是我现在可以阅读的内容:

$logged_in = 'no'; 
if (count($_COOKIE)) {
    foreach ($_COOKIE as $key => $val) {
        if (preg_match("/wordpress_logged_in/i", $key)) {
            $logged_in = 'yes';
        }       
    }
}
Run Code Online (Sandbox Code Playgroud)

也许有可能只是通过jquery来检查它,但我没有找到如何.

谢谢你的帮助

Sam*_*yan 6

您无法访问到名为wordpress的饼干wordpress_logged_in使用js/jquery,因为它标记为只HttpOnly:

安全cookie仅通过HTTPS协议通过加密请求发送到服务器...为防止跨站点脚本(XSS)攻击,JavaScript的Document.cookie API无法访问HttpOnly cookie; 它们只被发送到服务器.

但是,当用户登录时,3.0 wordpress会再添加一个名为wp-settings- {time} - [UID]的 cookie :

WordPress还设置了几个wp-settings- {time} - [UID] cookie.末尾的数字是用户数据库表中的个人用户ID.这用于自定义管理界面的视图,也可能是主站点界面.

你可以使用这个cookie js/jquery.因此,您甚至可以从cookie获取用户ID.

如果用户登录,这里有js函数用于获取cookie和检查:

function getLoggedInCookie() {
    var cookie = document.cookie.indexOf('wp-settings-time') !== -1;

    if(cookie){
        alert('Logged in');
    }else{
        alert('Not User');
    }
}
getLoggedInCookie();
Run Code Online (Sandbox Code Playgroud)

jQuery解决方案将包括Cookie插件到你的wordpress主题/插件并尝试使用它(可能需要在一些修改).

  • 当我使用具有自己的登录表单的 WooCommerce 时,接受的答案对我不起作用,因为登录时设置的脚本无法访问 cookie。解决方案是在登录时创建此类附加 cookie,并在注销时将其删除。在 Janos Szabo 提供的这个答案中显示了如何:https://wordpress.stackexchange.com/questions/69814/check-if-user-is-logged-in-using-jquery/298840#298840 (2认同)