有一种方法可以使用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';
}
}
}
也许有可能只是通过jquery检查它,但我没有找到。
感谢您的帮助
答案 0 :(得分:5)
您无法使用wordpress_logged_in
访问名为js/jquery
的wordpress Cookie,因为它被标记为HttpOnly
:
安全cookie仅通过加密请求发送到服务器 通过HTTPS协议...防止跨站点脚本(XSS) 攻击,JavaScript无法访问HttpOnly cookie Document.cookie API;它们只被发送到服务器。
但是,当用户登录时,3.0 wordpress会再添加一个名为wp-settings-{time}-[UID]的cookie:
WordPress还设置了几个wp-settings- {time} - [UID] cookie。数字 最后是用户数据库表中的个人用户ID。 这用于自定义管理界面的视图,也可能 也是主要的网站界面。
您可以使用js/jquery
获取此Cookie。因此,您甚至可以从Cookie中获取用户ID。
如果用户已登录,这里有用于获取cookie和检查的js函数:
function getLoggedInCookie() {
var cookie = document.cookie.indexOf('wp-settings-time') !== -1;
if(cookie){
alert('Logged in');
}else{
alert('Not User');
}
}
getLoggedInCookie();
jQuery解决方案将包括Cookie plugin到您的wordpress主题/插件并尝试使用它(可能需要进行一些修改)。
注意:强>
提供的代码适用于使用标准WordPress功能和端点的登录表单,例如http://{website-name}/wp-admin/
或http://{website-name}/wp-login.php
。第三方插件无法设置名为wp-settings-{time}-[UID]
的Cookie。
答案 1 :(得分:1)
类似主题here
此解决方案适合您。或者您可以在login action上添加操作,并使用wp_localize_script()
为您的文件创建js var。
答案 2 :(得分:1)
您可以创建ajax请求以检查用户是否已登录:
在functions.php中:
function ajax_check_user_logged_in() {
echo is_user_logged_in()?'yes':'no';
die();
}
add_action('wp_ajax_is_user_logged_in', 'ajax_check_user_logged_in');
add_action('wp_ajax_nopriv_is_user_logged_in', 'ajax_check_user_logged_in');
function load_my_scripts()
{
wp_localize_script('my-ajax-handle', 'the_ajax_script', array('ajaxurl' => admin_url('admin-ajax.php')));
}
add_action('wp_enqueue_scripts', 'load_my_scripts');
在js:
var data = {
action: 'is_user_logged_in'
};
jQuery.post(the_ajax_script.ajaxurl, data, function(response) {
if(response == 'yes') {
// user is logged in
} else {
// user is not logged in
}
});
答案 3 :(得分:0)
如果您只想知道某个用户是否已登录,您可以检查该body元素是否已“登录”类,即
jQuery( 'body' ).hasClass( 'logged-in' )
如果用户已登录,WordPress会将此类添加到body元素中。
答案 4 :(得分:0)
如另一个答案所述,wp_localize_script()
是一个有用的功能。我使用它,特别是:
wp_localize_script(
'site-js',
'siteVars',
array(
'ajaxurl' => admin_url( 'admin-ajax.php' ),
'isMobile' => (wp_is_mobile() ? true : false),
'isHome' => (is_home() || is_front_page() ? true : false),
'isSingle' => (is_single() ? true : false),
'isLogged' => (is_user_logged_in() ? true : false),
)
);
然后您可以在您的站点脚本中访问它,如siteVars.isLogged
,它将返回正确的布尔值。将其放在functions.php
文件中。我更喜欢将它放在一个函数中,并在排队脚本后立即执行它。
你可能能够使用诸如js-cookie之类的脚本 - 我已经使用该脚本多次通过WP设置/读取cookie数据。虽然wp_localize_script()
的第一种方法可能更可靠。如果cookie数据受到保护,则JS解决方案可能无法正常工作。 PHP解决方案是一个肯定的事情。您甚至可以扩展它以获取用户角色和用户信息。
https://developer.wordpress.org/reference/functions/is_user_logged_in/
https://codex.wordpress.org/Function_Reference/wp_localize_script
答案 5 :(得分:0)
这是普通的javascript版本,而不是jQuery。检查正文标签是否有“已登录”类。
var bodyClasses = document.getElementsByTagName("body")[0].classList;
var isUserLoggedIn = false;
bodyClasses.forEach(bodyClass => {
if (bodyClass === 'logged-in')
isUserLoggedIn = true;
});