【问题标题】:WordPress - Automatic logout when using different browser / IPWordPress - 使用不同浏览器/IP 时自动注销
【发布时间】:2013-04-05 14:00:40
【问题描述】:

恐怕我自己无法解决这个问题。奇怪的是,这个问题对于我的安装来说似乎是独一无二的。

在我基于 WordPress 的网站上,用户在登录时遇到问题,尤其是在使用手机进行身份验证时:他们正在注销(即使选中“记住我”)并且必须重新输入他们的凭据(之后他们再次注销)。据我推测,很可能是他们各自的移动互联网服务提供商一直在为他们的设备动态分配新的IP地址,导致身份验证失败。

当我使用我的桌面登录时,一切都会正常工作。但是,假设我已成功使用 Google Chrome 登录该站点,并且我打开 Mozilla Firefox (或任何其他浏览器)实例同时登录,Chrome 的用户“会话”将立即关闭(我知道这是因为一个异步脚本正在请求用户是否已登录,并在我使用其他浏览器登录后提示我登录)。因此,我相信整个 WordPress 身份验证也与用户代理有关。

尽管我非常感谢在从不同 IP 或浏览器访问站点时自动取消正在运行的会话所提供的额外安全性,但我的用户却没有。即使对我自己来说,使用三台不同的机器加上平板电脑和手机从任何可能的地方访问该网站也非常麻烦(最终我不再费心登录,只是等着回家)。

由于 WordPress 身份验证使用 cookie,我研究了它们是如何生成的。 wp_generate_auth_cookie() 方法使用用户名、部分哈希密码、过期时间和盐(wp-config.php 中定义的常量盐),但它既不使用 IP 地址也不使用用户代理。 我从字面上搜索了整个 WordPress 文件夹中的“用户代理”或“IP 地址”,但没有包含这些术语的登录相关脚本(只有少数插件根本不影响用户会话)。

这让我很困惑。如果 WordPress 不使用身份验证 cookie 存储该数据,它甚至如何意识到我使用不同的浏览器/计算机登录?将我和我的用户注销的检查发生在哪里?

您对如何解决问题有任何进一步的想法吗?

非常感谢您!

哈蒂

【问题讨论】:

    标签: wordpress authentication cookies


    【解决方案1】:

    Cookie 由浏览器存储,同一台机器上的不同浏览器不共享该存储空间。因此,当您使用 Chrome 登录时,WP 会向 Chrome 发送一个登录 cookie,从而开始一个新会话。然后,当您使用 Firefox 访问该站点时,FF 没有登录 cookie,因此 WP 会提示您登录,然后将登录 cookie 发送到 FF,同时开始一个新会话。下次您使用 Chrome 访问该网站时,它会获取 Chrome 的登录 cookie,该 cookie 与上次发送的与您的用户名相关联的 cookie 不匹配,因此一切重新开始。

    这并不能直接解释移动设备的问题;听起来由于某种原因他们没有正确存储 cookie。

    【讨论】:

    • 我想知道,为什么 WordPress 知道它已经在另一个浏览器中发送了一个新的 cookie - 可能是由于一个新的过期时间。但是,在验证 cookie 时,我找不到与数据库或其他东西的任何比较 - 这些数据可能存储在哪里?
    猜你喜欢
    • 1970-01-01
    • 2011-09-12
    • 2012-04-24
    • 2015-04-16
    • 1970-01-01
    • 1970-01-01
    • 2020-10-23
    • 2016-08-14
    相关资源
    最近更新 更多