我有一个Web应用程序,其中复杂的权限确定用户是否可以访问数千个不同文件中的每一个.用户可以查看所有文件,但有一个指示器可以打开他们有权访问的文件.如果用户中的其他人有权访问该文件,或者他们与之合作的某人拥有该文件的共享访问权限,则该用户可以访问该文件.
现在,我有一个复杂的PHP函数,通过构建用户可以访问的文件数组(在组织或协作中)以及合并这些访问数组来生成大型PHP会话.当这些文件显示给用户时,PHP会检查此数组以查看它们是否具有访问权限,如果有,则会添加按钮以打开该文件.我这样做是因为运行查询以检查每个单独文件的访问权限,在显示长文件列表时最终会占用太长时间,并且PHP的in_array()速度要快得多.
问题是…
PHP会话已经变得如此之大以至于它似乎正在减慢简单网站功能的速度,我需要考虑一种新方法来实现这一目标.
我的问题是……
替换PHP会话以存储用户有权访问的数千个文件的文件权限和文件位置的最佳方法是什么,以便在显示文件列表时,PHP可以快速检索此信息,而无需运行查询对于每个单独的文件?
嗯,在不知道问题的全部范围的情况下,我建议在数据库中添加一个Sessions表,并包含一个FilePermissions字段和一个UserId字段.
原文链接:https://www.f2er.com/php/137232.html此字段将存储权限结构的json表示形式.这只需要对数据库进行一次调用,并且大部分处理将在解析json数据服务器端时进行(根本不应该有很多开销).
这是减少客户端会话信息大小的标准方法.一个好的经验法则是在Sessions表中放置任何公开应用程序逻辑的东西.
更新
我只会在json字段中存储他们有权访问的文件.可以假设不存在禁止他们访问文件.这将再次降低性能足迹.
只有在没有复杂的权限结构时(例如每个文件都具有读写权限),这才有效.如果没有,我会说你很清楚.