管理会话变量的方法

Jor*_*vis 8 php mysql session triggers session-variables

我一直在阅读(mysql)触发过去几天...特别是我想要做的是找出一个更新用户信息的好方法.


用于此的案例与用户管理系统有关: 例如,admin用户将用户更新regular为a manager,此用户type更改将enable|disable接口上的软件功能.

问题:type除非您查询数据库并重置例如$_SESSION['user']['type']变量和/或用户登录系统,否则 您将不会知道此用户更改.


问题:有没有什么好方法可以解决这个问题?

Buk*_*ksy 4

我不认为 mysql触发器是理想的选择。为什么?因为您很可能最终会得到部分逻辑在 php 中、部分逻辑在 mysql 中的情况。坚持使用一种技术是一件好事,因为以后您和您的同事将更容易维护/调试代码。

因此,在您的情况下,如果您希望用户角色的更改立即采取行动,您必须在每个脚本运行时加载用户角色,或者使用数据库中的某个标志注销用户,该标志将表明他的会话不再有效(或者您可以实现自己的session_set_save_handler会话,将会话保存在文件中的某个位置,您可以将其删除以注销用户)。

这取决于您的需求,哪种解决方案更适合您的情况。

  • 如果您的角色逻辑很复杂,并且由分配给一个用户的多个角色以及每个用户的额外权限分配/排除组成,那么最好在用户登录时执行此检查,然后使用会话记住结果。
  • 如果检查每个脚本运行的权限不是问题,那么您可以这样做。但请注意,出于安全原因,强制用户重新登录可能是一个好习惯。
  • 如果用户注销可能导致工作丢失,您应该让用户自行注销并在下次登录后应用新的权限(您可以向用户显示一条消息,表明新权限正在等待登录生效)。

因此,这实际上取决于您的需求,选择是注销用户、立即授予他新权限还是等到下次登录更好。