在许多Web应用程序中,当用户登录我的网站时,我设置了几个会话变量来控制访问站点功能的权限。每当用户执行会导致这些权限更改的操作时,我都会更新会话变量作为正常处理流程的一部分。
但有时候需要根据其他用户的操作更新用户会话。例如,管理员升级用户的权限。管理员无法访问用户的会话空间,因此无法为受影响的用户运行正常的更新功能。
我考虑过几种强制更新其他用户会话的方法,但它们都有缺点:
- 我可以搜索并从会话表中删除其会话,但这需要进行全表扫描(其中sessdata类似于'%user_id%'),并且可能会导致受影响用户正在生成的内容丢失。 - 我可以定期强制进行会话更新,例如在触发sess_time_to_update时。但不能保证在用户尝试访问需要更新的功能之前会发生这种情况。 - 我可以在每个页面加载时运行完整的变量更新系列,但维护会话的全部意义在于避免这种开销。 - 我可以设置一个指示需要会话更新的标志,但该信号必须在每个页面执行和每个控制器中进行查询。(我知道可以将CI_Controller扩展为MY_Controller,但我不想这样做) - 我已经向用户发送了一封电子邮件,通知他们权限的更改,让他们轻松点击会话更新链接(甚至注销并重新登录)。但无法保证他们会阅读主题行之外的内容,更不用说实际点击链接了。
那么我是否遗漏了什么?我是否在寻找不存在的神奇解决方案?
(请注意,我已经标记了CodeIgniter,并引用了CI特定的技术细节,因为我正在使用它。也就是说,这不是一个CI特定(甚至不是PHP特定)的问题。)
感谢您的帮助!
但有时候需要根据其他用户的操作更新用户会话。例如,管理员升级用户的权限。管理员无法访问用户的会话空间,因此无法为受影响的用户运行正常的更新功能。
我考虑过几种强制更新其他用户会话的方法,但它们都有缺点:
- 我可以搜索并从会话表中删除其会话,但这需要进行全表扫描(其中sessdata类似于'%user_id%'),并且可能会导致受影响用户正在生成的内容丢失。 - 我可以定期强制进行会话更新,例如在触发sess_time_to_update时。但不能保证在用户尝试访问需要更新的功能之前会发生这种情况。 - 我可以在每个页面加载时运行完整的变量更新系列,但维护会话的全部意义在于避免这种开销。 - 我可以设置一个指示需要会话更新的标志,但该信号必须在每个页面执行和每个控制器中进行查询。(我知道可以将CI_Controller扩展为MY_Controller,但我不想这样做) - 我已经向用户发送了一封电子邮件,通知他们权限的更改,让他们轻松点击会话更新链接(甚至注销并重新登录)。但无法保证他们会阅读主题行之外的内容,更不用说实际点击链接了。
那么我是否遗漏了什么?我是否在寻找不存在的神奇解决方案?
(请注意,我已经标记了CodeIgniter,并引用了CI特定的技术细节,因为我正在使用它。也就是说,这不是一个CI特定(甚至不是PHP特定)的问题。)
感谢您的帮助!