启动会话时,通过查询对数据库进行身份验证。如果授予此身份验证,则会用数据填充一个或多个会话变量。这允许用户在多个页面中传输而无需重新进行身份验证 - 这很棒。但是,如果正在使用的会话变量在数据库中发生更改,即用户名更改,访问权限更改,则更改不会波及到会话(显然)。
如何使数据库更改触发或波及到 PHP 会话变量。
例如,登录到您具有访问权限 x 的网站,该网站允许您访问第 1、2、3 页。由于某种原因,您的权限现在被取消,您现在拥有访问权限y,这只允许您访问第1页。如果用户已在站点内进行身份验证,则这些更改不会影响用户的当前会话,并且仍然可以访问第 2 页和第 3 页。在许多情况下,这可能是一个问题。
目前,我对该问题的解决方案是在每个页面重新验证用户,并相应地更新会话变量。从我对会话(应该)如何工作的有限理解来看,这绝对似乎是完成这项任务的错误方法。
从本质上讲,我想要一种数据库更新来触发当前登录用户的重新身份验证的方法。 即,如果用户 john12 更改了他的数据库行,那么他的会话应该需要重新身份验证。
目前,我想不出任何方法可以在每次加载页面时查询数据库的情况下完成此操作。
任何提示或解决方案将不胜感激。
我通常的做法是将 4 个用于身份验证的字段作为我的数据库。
- 用户名
- 密码(通常为散列)
- 令 牌
- 记录的 IP
我记得用户在 cookie 中的身份验证数据。当用户输入正确的用户名和密码时,网站会生成一个新令牌并设置两个cookie - 用户名和密码。在每个页面加载时,您检查用户名,令牌和记录的IP是否匹配(以防止令牌窃取)。如果其中一个不正确,请将其全部删除并重定向到登录页面。
在您的情况下,如果您想在密码更改时重新登录,只需在更改令牌时将其删除即可。
这里唯一的缺点是在给定时间只能记录一台计算机。
我不明白为什么您不想查询数据库以获取用户权限,即使有很多记录,SQL 数据库也非常快,尤其是在按主键搜索时。