Что лучше? Много маленьких значений сессии или одно большое? PHP - PullRequest
2 голосов
/ 05 октября 2011

У меня около 15-20 настроек разрешений, которые загружаются при входе пользователя в систему. Каждый из них сохраняется как сеанс со значением 1 или 0.

Мне интересно, было бы лучшеиметь одну сессию, такую ​​как $_SESSION['permissions'] со значением: dothis:0,dothat:1,doanother:1 и т. д. (одна большая строка), которую я могу разложить и разделить позже с помощью PHP, или было бы лучше, если бы все они были отдельными сессиями, простозначение 1 или 0?

Ответы [ 2 ]

5 голосов
/ 05 октября 2011

Вместо анализа строки, сохраните их как массив в $_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
}
4 голосов
/ 05 октября 2011

Я бы имел ассоциативный массив, содержащий все разрешения ...

$_SESSION['permissions'] = array(
   ...
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...