Поэтому мой вопрос очень прост.
Проверяя, что пользователь все еще зарегистрирован на любой странице, я буду использовать
if (isset($_SESSION['user']) && $_SESSION['user'] == true) { CODE }
Но не следует ли использовать хеш-значение вместо логического значения для $ _SESSION ['user']? Все справочники, которые я нахожу, используют логические значения, но с моей точки зрения это утечка безопасности, не так ли? Люди все время говорят о Session-Hjacking и Session-Fixation, и это было бы очень легко, если бы я просто использовал логические значения для сеанса пользователя, не так ли? Или я просто смешиваю вещи здесь?
спасибо
Здесь я прочитал два вопроса. Первый вопрос: «Какова наилучшая практика для определения того, вошел ли пользователь в систему?», И второй вопрос «Есть ли проблема с Session-Hjacking и Session-Fixation?»
Первый вопрос: Большинство веб-приложений / cms, с которыми я работал, имеют пользовательский объект. Нет ничего особенного в этом объекте с точки зрения кода, его просто объект, представляющий пользователя. Зарегистрированный пользователь имеет свой пользовательский объект, хранящийся в сеансе. $_SESSION['user']
В Drupal (и других платформах) функция используется для возврата текущего зарегистрированного пользователя или False, если пользователь не вошел в систему.
Пример:
function user(){ if( isset($_SESSION['user') and is_object($_SESSION['user'] and get_class($_SESSION['user']=='myUserClass')) ){ return $_SESSION['user']; }else{ return False; } }
Итак, в вашем примере мы видим, работает if ( user() ) { CODE }
потому что весь объект оценивается как True в предложении if
.
Второй вопрос: Session-Hjacking и Session-Fixation на самом деле не являются проблемой. Клиент (веб-браузер) не имеет доступа к массиву $ _SESSION сервера. Короче говоря, да, вы смешиваете вещи здесь.