Ответ 1
isset
, как правило, является правильным способом проверить, определены ли в настоящее время предопределенные переменные:
Если вы используете версию php до 5.4,
вы обычно можете уйти и его соблазнить, просто делая код ниже, но имейте в виду, что если по какой-то причине сеансы отключены, session_start() все равно будет вызван, что может привести к ошибкам и ненужной отладке, поскольку $Массив _SESSION не может быть создан.
if(!isset($_SESSION)){session_start();}
если вы хотите узнать, проверяет, отключены ли сеансы по какой-либо причине, вы можете подавить сообщение об ошибке, установить переменную тестового сеанса, а затем проверить, была ли она установлена. Если это не так, вы можете запрограммировать реакцию на сеансы с отключенным доступом. Вы захотите сделать все это в начале или в начале вашего script. Так, например, (работает по-разному в зависимости от настройки обработки ошибок):
if(!isset($_SESSION)){session_start();}
$_SESSION['valid'] = 'valid';
if($_SESSION['valid'] != 'valid')
{
//handle disabled sessions
}
Однако, если вы используете php версии 5.4 или выше,
Вы можете использовать функцию session_status(), лучший вариант, поскольку он учитывает отключенные сеансы и проверяет, существует ли сеанс.
if (session_status() === PHP_SESSION_NONE){session_start();}
Обратите внимание, что PHP_SESSION_NONE является константой, заданной PHP, и поэтому ее не нужно обматывать в кавычки. Он оценивает целое число 1, но как его константа, специально предназначенная для устранения потребности в магических числах, лучше всего протестировать ее с константой.