Уже начатые сеансы PHP

В моем PHP-коде, если сеанс уже запущен, и я пытаюсь запустить новый, я получаю следующее уведомление:

Примечание: сеанс уже запущен – игнорирование session_start ()

Как я могу избежать этого?

Пытаться

<?php if(!isset($_SESSION)) { session_start(); } ?> 

Если вы хотите новый, выполните session_destroy() перед его запуском. Чтобы проверить, установлен ли его набор перед его запуском, вызовите session_status() :

 $status = session_status(); if($status == PHP_SESSION_NONE){ //There is no active session session_start(); }else if($status == PHP_SESSION_DISABLED){ //Sessions are not available }else if($status == PHP_SESSION_ACTIVE){ //Destroy current and start new one session_destroy(); session_start(); } 

Я бы не стал проверять глобальную $_SESSION вместо вызова метода session_status() поскольку PHP явно реализовал эту функцию:

Открыть статус сеанса с помощью новой функции session_status Это для (PHP> = 5.4.0)

Только если вы хотите уничтожить предыдущую сессию:

 <?php if(!isset($_SESSION)) { session_start(); } else { session_destroy(); session_start(); } ?> 

или вы можете использовать

 unset($_SESSION['variable_session _data']) 

для уничтожения определенной переменной сеанса.

Да, вы можете определить, запущен ли сеанс, проверив isset($_SESSION) . Однако лучшим ответом является не просто вызов session_start() более одного раза.

Его следует называть очень рано в вашем скрипте, возможно, даже в первой строке, а затем не вызывать снова.

Если у вас это в более чем одном месте в вашем коде, тогда вы просите получить такую ​​ошибку. Сократите это, так что это только в одном месте и может быть вызвано только один раз.

Вы должны уже назвать начало сеанса, может быть, снова вызваны через include?

 if( ! $_SESSION) { session_start(); } 

попробуй это

 if(!isset($_SESSION)){ session_start(); } 

Я предлагаю вам использовать ob_start (); перед запуском любого sesson varriable, это должно заказывать буфер браузера.

edit: Добавлено дополнительно) после $ _SESSION

Ни одно из указанных выше не было подходящим, не вызывая session_start () во всех php-файлах, которые зависят от переменных $ Session, которые они не будут включены. Уведомление настолько раздражает и быстро заполняет Error_log. Единственное решение, которое я могу найти, это то, что …

  error_reporting(E_ALL ^ E_NOTICE); session_start(); 

Плохое исправление, но оно работает.

Я столкнулся с этой проблемой, пытаясь исправить поведение блокировки $ _SESSION.

http://konrness.com/php5/how-to-prevent-blocking-php-requests/

Файл сеанса остается заблокированным до завершения скрипта или сеанса вручную закрывается.

Таким образом, по умолчанию страница должна открывать сеанс в режиме только для чтения. Но как только он открыт только для чтения, он должен быть закрыт и снова открыт в режиме записи.

 const SESSION_DEFAULT_COOKIE_LIFETIME = 86400; /** * Open _SESSION read-only */ function OpenSessionReadOnly() { session_start([ 'cookie_lifetime' => SESSION_DEFAULT_COOKIE_LIFETIME, 'read_and_close' => true, // READ ACCESS FAST ]); // $_SESSION is now defined. Call WriteSessionValues() to write out values } /** * _SESSION is read-only by default. Call this function to save a new value * call this function like `WriteSessionValues(["username"=>$login_user]);` * to set $_SESSION["username"] * * @param array $values_assoc_array */ function WriteSessionValues($values_assoc_array) { // this is required to close the read-only session and // not get a warning on the next line. session_abort(); // now open the session with write access session_start([ 'cookie_lifetime' => SESSION_DEFAULT_COOKIE_LIFETIME ]); foreach ($values_assoc_array as $key => $value) { $_SESSION[ $key ] = $value; } session_write_close(); // Write session data and end session OpenSessionReadOnly(); // now reopen the session in read-only mode. } OpenSessionReadOnly(); // start the session for this page 

Затем, когда вы идете написать какое-то значение:

 WriteSessionValues(["username"=>$login_user]); 

Это было бы более эффективно:

 @session_start(); 

Избегание обработчика ошибок на экране

Лучший,

 <?php if ( session_id() != "" ) { session_start(); } 

В принципе, вам нужно проверить, был ли сеанс запущен до создания другого; … больше чтение .

С другой стороны, вы решили уничтожить существующий сеанс перед созданием другого с помощью session_destroy() .

замените session_start (); в

 if(!isset($a)) { $a = False; if($a == TRUE) { session_start(); $a=TRUE; } }