gpt4 book ai didi

php - 如何获取 mysql 数据库更新以在 PHP session 中触发重新身份验证

转载 作者:行者123 更新时间:2023-11-29 10:27:09 25 4
gpt4 key购买 nike

启动 session 时,通过查询对数据库进行身份验证。如果这一身份验证被授予,一个或多个 session 变量将被填充数据。这允许用户在多个页面之间进行传输,而无需重新进行身份验证 - 这非常棒。但是,如果正在使用的 session 变量在数据库内发生更改,即用户名更改、访问权限更改,则这些更改不会波及到 session (显然)。

如何才能让数据库更改触发或影响 PHP session 变量。

一个示例是登录到您拥有访问权限 x 的网站,该权限允许您访问页面 1、2、3。您的权限现在由于某种原因被剥夺,您现在拥有访问权限 y,该权限仅允许您访问页面 1。如果用户已在站点内进行身份验证,这些更改将不会影响用户当前 session ,并且仍然能够访问第 2 页和第 3 页。在许多情况下这可能是一个问题。

目前我解决这个问题的方法是在每个页面重新验证用户身份,并相应地更新 session 变量。从我对 session (应该)如何工作的有限理解来看,这显然是完成这项任务的错误方法。

本质上,我想要一种数据库更新触发当前登录用户重新身份验证的方法。即,如果用户 john12 的数据库行被更改,那么他的 session 应该需要重新身份验证。

目前,我想不出有什么方法可以在每次加载页面时不查询数据库的情况下完成此操作。

任何提示或解决方案将不胜感激。

最佳答案

我通常的做法是在我的数据库中设置 4 个用于身份验证的字段。

  • 用户名
  • 密码(通常经过哈希处理)
  • token
  • 记录的 IP

我记得 cookie 中的用户身份验证数据。当用户输入正确的用户名和密码时,网站会生成一个新 token 并设置两个 cookie - 用户名和 token 。在每个页面加载时,您都会检查用户名、 token 和记录的 IP 是否匹配(以防止 token 被窃取)。如果其中一个不正确,请将其全部删除并重定向到登录页面。

在您的情况下,如果您想在更改密码时重新登录,只需在更改后删除 token 即可。

这里唯一的缺点是在给定时间只能记录一台机器。

<小时/>

我不明白为什么你不想在数据库中查询用户权限,即使有大量记录,SQL 数据库也非常快,尤其是通过主键搜索时。

关于php - 如何获取 mysql 数据库更新以在 PHP session 中触发重新身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48086987/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com