Вопрос по session, php – Сеансы PHP, которые уже были запущены

62

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

Notice: A session had already been started - ignoring session_start()

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

Для меня это сработало просто путем удаления session_start (), если сессия уже запущена, тогда зачем нам ее начинать заново. В моем случае это был просто файл config.php, который ВКЛЮЧЕН в код Mangesh Sathe
возможный дубликатHow to tell if a session is active? - Пожалуйста, используйте поиск, прежде чем задать вопрос. hakre
Не начинать новый сеанс, если работает старый? Madara Uchiha♦

Ваш Ответ

11   ответов
1

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

if( ! $_SESSION)
{
    session_start();
}  
Error: User Rate Limit Exceeded
Error: User Rate Limit ExceededNotice: Undefined variable: _SESSIONError: User Rate Limit ExceededissetError: User Rate Limit Exceeded
2

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

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

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

0

пытаясь исправить поведение блокировки $ _SESSION.

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

The session file remains locked until the script completes or the session is manually closed.

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

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]);
0
<?php
if ( session_id() != "" ) {
    session_start();
}

вам нужно проверить, был ли запущен сеанс, прежде чем создавать другой;... more reading.

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

0

попробуй это

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

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

редактировать: добавлен дополнительный) после $ _SESSION

3

Only if you want to destroy previous session :

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

or you can use

unset($_SESSION['variable_session _data'])

to destroy a particular session variable.

0

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

    error_reporting(E_ALL ^ E_NOTICE);
    session_start();

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

-3

в

if(!isset($a))
{

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

}
Error: User Rate Limit Exceeded$aError: User Rate Limit Exceeded$_SESSIONError: User Rate Limit Exceeded
27

Если вы хотите новый, то сделайте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 вместоof  Я звонюsession_status() метод, поскольку PHP реализовал эту функцию явно для:

Expose session status via new function, session_status This is for (PHP >=5.4.0)

Error: User Rate Limit Exceeded
0

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

@session_start();

Как избежать обработки ошибок на экране

Лучший,

203

<?php
    if(!isset($_SESSION)) 
    { 
        session_start(); 
    } 
?>
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded

Похожие вопросы