есть ли короткий трюк кода, чтобы проверить, запущен ли сеанс, а если нет, то загрузите его? В настоящее время я получаю сообщение об ошибке «session уже начал …», если я включил сеанс, независимо от проверки.
isset
как правило, является правильным способом проверить, определены ли в настоящее время предопределенные переменные:
Если вы используете версию php до 5.4 ,
вы, возможно, избегаете и заманчиво выполняете код ниже, но имейте в виду, что если по какой-то причине сеансы отключены, session_start () все равно будет вызван, что может привести к ошибкам и ненужной отладке, поскольку массив $ _SESSION isn 't позволили быть созданы.
if(!isset($_SESSION)){session_start();}
если вы хотите узнать, проверяет, отключены ли сеансы по какой-либо причине, вы можете подавить сообщение об ошибке, установить переменную тестового сеанса, а затем проверить, была ли она установлена. Если это не так, вы можете запрограммировать реакцию на сеансы с отключенным доступом. Вы захотите сделать все это в начале сценария или рядом с ним. Так, например, (работает по-разному в зависимости от настройки обработки ошибок):
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, но поскольку его константа, специально предназначенная для устранения потребности в магических числах, лучше всего проверять на константу.
Многие люди просто используют @session_start()
для подавления предупреждения о том, что сеанс уже запущен. Альтернативой обычно является:
if (session_status() === PHP_SESSION_NONE) session_start();
if (version_compare(phpversion(), '5.4.0', '<')) { if(session_id() == '') { session_start(); } }else{ if (session_status() == PHP_SESSION_NONE) { session_start(); } }
if (session_id() === "") { session_start(); }
Проверка существующего сеанса перед запуском нового:
// # if phpversion() is >= 5.4 if(phpversion() >= 5.4) { // # check session_status() function for value 'PHP_SESSION_NONE' if(session_status() === PHP_SESSION_NONE) { session_start(); } } else { // # maintain backwards compat. with PHP versions older than 5.4 // # if $_SESSION object if NOT set, start a new session! if(!isset($_SESSION)) { session_start(); } }