Это плохая практика?
if ($_SESSION['something'] == '') { echo 'the session is empty'; }
Есть ли способ проверить, является ли его пустым или он не установлен? Я действительно делаю это:
if (($_SESSION['something'] == '') || (!isset($_SESSION['something'])) { echo 'the session is either empty or doesn\'t exist'; }
!isset
просто проверяет, существует ли $_SESSION['']
и не проверяет, имеются ли значения в массиве или нет
Я бы использовал isset
и empty
:
session_start(); if(isset($_SESSION['blah']) && !empty($_SESSION['blah'])) { echo 'Set and not empty, and no undefined index error!'); }
array_key_exists
– хорошая альтернатива использованию isset
для проверки ключей:
session_start(); if(array_key_exists('blah',$_SESSION) && !empty($_SESSION['blah'])) { echo 'Set and not empty, and no undefined index error!'); }
Убедитесь, что вы вызываете session_start
перед чтением или записью в массив сеансов.
Используйте isset
, empty
или array_key_exists
(особенно для ключей массива), прежде чем обращаться к переменной, существование которой вы не уверены. Поэтому измените порядок во втором примере:
if (!isset($_SESSION['something']) || $_SESSION['something'] == '')
вы ищете empty()
функцию PHP
Вы можете использовать функцию count (), чтобы узнать, сколько записей в массиве $ _SESSION. Это не очень хорошая практика. Вместо этого вы должны установить идентификатор пользователя (или что-то подобное), чтобы проверить, был ли сеанс инициализирован или нет.
if( !isset($_SESSION['uid']) ) die( "Login required." );
(Предполагая, что вы хотите проверить, зарегистрирован ли кто-либо)
Если вы хотите проверить, доступны ли сеансы, вы, вероятно, захотите использовать функцию session_id()
:
session_id () возвращает идентификатор сеанса для текущего сеанса или пустую строку (""), если текущий сеанс отсутствует (текущий идентификатор сеанса отсутствует).
if(isset($_SESSION)) {} else {}
Это не плохая практика. Но вы можете получить сообщение об ошибке
undefined index (ключ, который вы определили)
Поэтому лучше всего проверить, существует ли ключ массива, используя встроенную функцию array_key_exists
.