使用用户登录的自定义实现保持用户会话

时间:2021-03-30 作者:Álvaro Franz

要在wp admin区域之外实现自定义用户登录功能,wp_signon() function 就是要走的路。此函数接受一个数组,其中可能包含;记住;输入布尔值,以确定用户在接下来的14天内是否应保持登录状态。

我在自定义登录实现中使用wp\\u signon(),并将记住设置为true,如下所示:

// $args[\'...\'] = ...

$args[\'remember\'] = true;
$user = wp_signon($args, is_ssl());

if(is_wp_error($user)){
    // ...
    return;
}else{
    wp_set_current_user($user->ID);
    wp_set_auth_cookie($user->ID);
    // ...
}
登录过程本身运行得很好,但一旦我关闭浏览器并再次打开它,就不会出现;记住;在任何地方,用户都显示为未经身份验证。

从开发人员的角度来看,我没有找到任何与此记住会话功能的工作方式相关的文档。

The generated cookies are:

enter image description here

enter image description here

From the docs: (see docs)

登录时,WordPress使用WordPress\\uu[哈希]cookie存储您的身份验证详细信息。其使用仅限于管理屏幕区域/wp admin/

我不明白这一点。有人能提供更详细的解释吗?最后一部分让我认为,这个记住我的功能是在设计时考虑到了wp管理区域,而不是前面。也许这就是它不起作用的原因。

登录后,WordPress设置WordPress\\u logged\\u in\\uHash[哈希]cookie,它指示您何时登录,以及您是谁,以供大多数用户使用。

这是可以理解的。但我还是很困惑。

我注意到到期日期不包含日期。上面写着:“;会话;。它是否应该包含将来的日期?

So my question would be:

如果记忆键随wp\\u signon()提供,我如何处理自动登录?如果我想在wp admin(wp管理)区域之外使用它,我是否需要手动检查它?或者,由于wp load(wp负载),这应该是现成的。php?

What have I done to try to solve the mystery:

延长cookie生存期:

function long_live_the_auth_cookie($expirein){
    return 31556926; // 1 year in seconds
}
add_filter(\'auth_cookie_expiration\', \'long_live_the_auth_cookie\');
在多个浏览器和设备中进行测试,以确保这不是特定于浏览器或设备的问题。

Did I think of my own solution?:

对使用自定义代码实现“记住我”功能,而忽略WP方式,因为WP用户特性似乎只关注后端。但我认为这太极端了,问题是我只是想知道这些饼干到底是怎么回事,以及如何将它们用于我的目的。

1 个回复
最合适的回答,由SO网友:Sally CJ 整理而成

wp_signon() 实际上已经打过电话了wp_set_auth_cookie() 这是设置;“记住我”;cookie,因此不需要手动调用该函数。

还有那个(wp_set_auth_cookie($user->ID)) 实际上是代码中的问题,因为它覆盖了;“记住我”;已设置的cookie。

相关推荐

Can't login to my own website

自2016年3月以来,我有一个WordPress网站,但几年前我失去了登录自己网站的能力。我使用的是2616主题,因此在屏幕底部有一个小面板,我可以单击并登录。当我这样做时,会出现“登录”窗口,我将信息放入字段,然后登录,但会被踢回我的网站并注销。如果我加上;wp登录。php“;最后,它会将我发送给wp管理员,但如果我现在访问我的网站,我仍然会注销。这太烦人了,我真的很想尝试修复它,所以如果有人知道到底发生了什么,我会非常感激!