[英]PHP Session vs. DB Lookup
我已经阅读了与此主题相矛盾的信息,所以我希望提出的方案比一个方案更理想。
在我的情况下,有些“用户”有权访问由“部分”组成的“组”。 根据用户的配置,每个部分可以具有不同的权限级别。 所以我可能是某个部门的“管理员”,而我的同事却是“基本”的。
登录后,用户将选择他们想要管理/查看的组。 我最初的计划是查找用户/组/部分/权限信息,并将其存储在会话中的数组中,例如...
$_SESSION[group_id][sectioin_id]['permission'] = 7; // 1+2+4 (R+W+X)
然后,当他们转到页面时,我可以查找他们所在的组,查看其所在页面的哪个部分,并根据其权限显示适当的信息。
或者,我可以构建一个数据库查找脚本来检查此信息,但是它将必须跨多个联接表查找并解析每个页面的结果。 这对我来说似乎效率很低,但是从我阅读的有关如何为每个页面编写会话的内容来看,事实并非如此。
感谢您的任何想法/建议。
// ----有关可能的会话大小的更多信息
目前,一个小组最多有5个部分,最多包含3个数据。 当前会话的最大大小为:
$_SESSION[1][1]['permission'] = 7;
$_SESSION[1][1]['type'] = 'paid';
$_SESSION[1][1]['expires'] = '2011-08-01';
$_SESSION[1][2]['permission'] = 7;
$_SESSION[1][2]['type'] = 'free';
$_SESSION[1][3]['permission'] = 7;
$_SESSION[1][3]['type'] = 'paid';
$_SESSION[1][3]['expires'] = '2011-08-01';
$_SESSION[1][4]['permission'] = 7;
$_SESSION[1][4]['type'] = 'paid';
$_SESSION[1][4]['expires'] = '2011-08-01';
$_SESSION[1][5]['permission'] = 7;
$_SESSION[1][5]['type'] = 'free';
在第1、3、4部分为付费版本而第2、5部分为免费版本的情况下就是这种情况。 每次登录都跟踪太多会话内容吗?
两种方法都会起作用。 注意事项:
我称这是一个非常丑陋的骇客。 您想要做的是建立一个大对象,并在多次执行php解释器时将其保留。 将对象隐藏到会话数据中虽然很聪明,但是这样做是“错误的”方法。
请记住,对于您的方法,对于每个新的用户会话,您将存储完整的权限表集,一遍又一遍地复制相同的数据。
IMO,您应该在登录时进行昂贵的查找(无论如何,可能再也没有其他繁重的工作了),然后在其会话中保留用户的权限掩码,例如$ _SESSION [“ permission”] = 7
如果您确实想在多个交互中保存一个权限提供程序,请查看对象序列化;有关详细信息,请参见第2章。 您可以将对象存储在数据库中,而不会滥用$ _SESSION。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.