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

如何在PHP会话中获取mysql数据库更新以触发重新身份验证,php,mysql,sql,session,authentication,Php,Mysql,Sql,Session,Authentication,启动会话时,通过查询对数据库进行身份验证。如果授予此身份验证,则会用数据填充一个或多个会话变量。这允许用户在无需重新验证的情况下通过多个页面进行传输,这非常好。但是,如果正在使用的会话变量在数据库中发生更改,即用户名更改、访问权限更改,则更改不会波及到会话(显然) 如何使数据库更改触发PHP会话变量,或使其波动 例如,登录到一个网站,在该网站上,您拥有访问权限x,允许您访问第1、2、3页。由于某种原因,您的权限现在被剥夺,您现在拥有访问权限y,它只允许您访问第1页。如果用户已经在站点内通过身份验

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

如何使数据库更改触发PHP会话变量,或使其波动

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

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

本质上,我希望数据库更新能够触发对当前登录用户的重新身份验证。i、 e.如果用户john12的数据库行被更改,那么他的会话应该需要重新身份验证

目前,如果不在每次加载页面时查询数据库,我想不出任何方法来实现这一点


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

我通常是通过4个字段进行身份验证的,这是我的数据库

  • 用户名
  • 密码(通常是散列的)
  • 代币
  • 记录的IP
我记得用户在cookies中的身份验证数据。当用户输入正确的用户名和密码时,网站将生成一个新的令牌并设置两个cookie-用户名和令牌。在每次加载页面时,您都会检查用户名、令牌和登录的IP是否匹配(以防止令牌被盗)。如果其中一个不正确,请删除所有这些内容并重定向到登录页面

在您的情况下,如果您想在密码更改时重新登录,只需在更改令牌后删除它

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



我不明白您为什么不想查询数据库中的用户权限,SQL数据库速度非常快,即使有很多记录,尤其是在按主键搜索时。

在会话中记住用户权限不是一个好做法。为什么不在每个页面加载时查询数据库?您是说在每个页面上查询数据库是解决此问题的最佳方法吗?您希望立即更改数据库,但同时希望缓存它。这些是完全相反的。