繁体   English   中英

PHP会话与数据库查找

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM