Загружать session_start() только в том случае, если сеанс не существует?

есть ли короткий трюк кода, чтобы проверить, запущен ли сеанс, а если нет, то загрузите его? В настоящее время я получаю сообщение об ошибке "session уже начал...", если я включил начало сеанса независимо от проверки.

Ответы

Ответ 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();
      }
  }