PHP会话与DB查找

时间:2011-07-26 16:08:01

标签: php session

我已阅读有关此主题的相互矛盾的信息,所以我希望我提出的方案,一个计划将比另一个更理想。

在我的情况下,有“用户”可以访问由“部分”组成的“组”。根据用户的配置方式,每个部分可以具有不同的权限级别。所以我可能是一个部门的“管理员”,而我的同事是“基本的”。

登录后,用户将选择要管理/查看的组。我最初的计划是查找用户/组/部分/ permisison信息并在会话中存储在一个数组中......

$_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处于免费版本,则会出现这种情况。 每次登录都会记录太多的会话内容吗?

2 个答案:

答案 0 :(得分:0)

无论哪种方式都能发挥作用。注意事项:

  • 访问系统的敏感程度如何?如果你采用会话方法并且用户被禁用或删除了权限,那么他们在下次登录之前仍然可以访问。
  • 会话数据的大小应该有限。如果您有一百万个组/部分/权限,那么您的会话数据将非常庞大且处理速度很慢。

答案 1 :(得分:0)

我称这是一个非常难看的黑客。你要做的是建立一个大对象,并在PHP解释器的多个执行中保持它。将对象潜入会话数据是聪明的,但这是“错误”的方式。

请记住,使用您的方法,对于每个新用户会话,您要存储完整的权限表集,一遍又一遍地复制相同的数据。

IMO你应该在登录时采取昂贵的查找命中(无论如何可能没有其他繁重的工作),然后在他/她的会话中保留用户的权限掩码,如$ _SESSION [“permission”] = 7 < / p>

如果您真的想要跨多个交互保存权限提供程序,请查看对象序列化;您可以将数据库中的对象存储为真实而不会滥用$ _SESSION。