什么是最好的?许多小会话值或一个大的值? PHP

时间:2011-10-05 01:45:57

标签: php session

我有大约15-20个用户登录时加载的权限设置。这些设置都存储为值为1或0的会话。

我想知道,如果$_SESSION['permissions']之类的会话值为dothis:0,dothat:1,doanother:1等等(一个大字符串)会更好,我可以在以后使用PHP进行分解和分离,或者最好将所有这些作为单独的会话,只有1或0的值?

2 个答案:

答案 0 :(得分:5)

而不是要解析的字符串,将它们存储为$_SESSION中的数组。这使得修改单个权限变得更加容易,而无需进行大量的字符串操作。

session_start();
$_SESSION['permissions'] = array();
$_SESSION['permissions']['dothis'] = TRUE;
$_SESSION['permissions']['dothat'] = FALSE;
$_SESSION['permissions']['doanother'] = TRUE;

<强>附录

你可能已经想到了这一点,但我想我会补充一点,通过一些小功能与这些进行交互最容易。这些将节省大量的输入(和输入错误),并确保所有值最终都为布尔值。

function grant($permission) {
  $_SESSION['permissions'][$permission] = TRUE;
}
function revoke($permission) {
  $_SESSION['permissions'][$permission] = FALSE;
}
// Test if the user is allowed to do $permission
// FALSE if the permission isn't set
function user_can($permission) {
  return isset($_SESSION['permissions'][$permission]) ? $_SESSION['permissions'][$permission] : FALSE;
}

您可以将它们称为:

grant('dothis');
revoke('dothat');
if (user_can('doanother')) {
   // congratulations you're allowed
}

答案 1 :(得分:4)

我有一个拥有所有权限的关联数组......

$_SESSION['permissions'] = array(
   ...
);