启动会话时,通过查询对数据库进行身份验证。如果授予此身份验证,一个或多个会话变量将填充数据。这允许用户通过多个页面进行传输,而无需重新进行身份验证—这很好。但是,如果正在使用的会话变量在数据库中发生更改,即用户名更改、访问权限更改,则更改不会波及到会话(显然)。
如何使数据库更改触发php会话变量,或使其产生涟漪。
一个例子是登录到一个网站,在那里您有访问权限x,允许您访问第1、2、3页。由于某种原因,您的权限现在被剥夺,您现在拥有访问权限y,它只允许您访问第1页。如果用户已经在站点内通过了身份验证,这些更改将不会影响用户当前会话,并且仍然可以访问第2页和第3页。在许多情况下,这可能是一个问题。
目前,我的解决方案是对每个页面的用户重新进行身份验证,并相应地更新会话变量。从我对会话(应该)如何工作的有限理解来看,这显然是完成这项任务的错误方法。
基本上,我希望数据库更新能够触发对当前登录用户的重新验证。i、 e.如果用户john12的数据库行被更改,那么他的会话应该需要重新验证。
目前,如果每次加载一个页面时都不查询数据库,我想不出任何方法来实现这一点。
任何提示或解决方案将不胜感激。
1条答案
按热度按时间lrl1mhuk1#
我通常是这样做的,我的数据库中有4个用于身份验证的字段。
用户名
密码(通常是散列的)
代币
记录的ip
我记得用户在cookies中的身份验证数据。当用户输入正确的用户名和密码时,网站会生成一个新的令牌,并设置两个cookie-用户名和令牌。在每次加载页面时,检查用户名、令牌和记录的ip是否匹配(以防止令牌窃取)。如果其中一个不匹配,则删除所有这些内容并重定向到登录页面。
在您的情况下,如果您想在密码更改时重新登录,只需在令牌更改后删除它。
这里唯一的缺点是在给定的时间只能记录一台机器。
我不明白为什么你不想查询数据库的用户权限,sql数据库是难以置信的快,即使有很多记录,特别是如果搜索主键。