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

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

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

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

Ответы

Ответ 1

Try

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

Ответ 2

Если вы хотите новый, сделайте 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)

Ответ 3

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

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

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

unset($_SESSION['variable_session _data'])

, чтобы уничтожить определенную переменную сеанса.

Ответ 4

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

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

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

Ответ 5

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

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

Ответ 6

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

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

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

Ответ 7

попробуйте это

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

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

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

Ответ 8

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

    error_reporting(E_ALL ^ E_NOTICE);
    session_start();

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

Ответ 9

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

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

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

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

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]);

Ответ 10

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

@session_start();

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

Бест,

Ответ 11

session_status() === PHP_SESSION_ACTIVE ?: session_start();

Закрытая игра

Ответ 12

заменить session_start(); до

if(!isset($a))
{

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

}