jQuery检查wordpress_logged_in cookie

时间:2018-01-29 23:18:33

标签: jquery wordpress cookies

有一种方法可以使用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检查它,但我没有找到。

感谢您的帮助

6 个答案:

答案 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;
});