есть ли короткий трюк кода, чтобы проверить, запущен ли сеанс, а если нет, то загрузите его? В настоящее время я получаю сообщение об ошибке "session уже начал...", если я включил начало сеанса независимо от проверки.
Загружать session_start() только в том случае, если сеанс не существует?
Ответ 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, но как его константа, специально предназначенная для устранения потребности в магических числах, лучше всего протестировать ее с константой.
Ответ 2
Многие люди просто используют @session_start()
для подавления предупреждения о том, что сеанс уже запущен. Альтернативой обычно является:
if (session_status() === PHP_SESSION_NONE) session_start();
Ответ 3
if (version_compare(phpversion(), '5.4.0', '<')) {
if(session_id() == '') {
session_start();
} }else{
if (session_status() == PHP_SESSION_NONE) {
session_start();
} }
Ответ 4
if (session_id() === "") { session_start(); }
Ответ 5
Проверка существующего сеанса перед запуском нового:
// # 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();
}
}