Неопределенная переменная: _SESSION VS. Сеанс уже был начат

Привет. У меня есть скрипты на php. В одном из них у меня есть код session_start (), и когда у меня в другом скрипте снова есть session_start (), я получаю уведомление:

Примечание: сеанс уже был начат ...

Это логично. Но когда я удаляю его, я получаю сообщение об ошибке:

Примечание: неопределенная переменная: _SESSION

Почему? И как мне это исправить? Скрипты работают нормально, когда у меня есть session_start () в двух местах в скрипте (только небольшое уведомление), но не работают вообще, когда у меня нет двух session_start ().

Единственное решение, чтобы иметь

error_reporting(E_ALL ^ E_NOTICE);

в моем сценарии? И разве это не плохая практика - просто игнорировать уведомления?

Изменить:

Части моего кода:

            try {
            //session_start();

            $STH = DB::prepare  (   "UPDATE users SET DJ_name=?, DJ_showname=? WHERE id=?" );
            $STH->execute(array($_POST['DJ_name'], $_POST['DJ_showname'], $_SESSION['userid']));

            pre_dump($_SESSION);

            $_SESSION['DJ_name']        =   $_POST['DJ_name'];
            $_SESSION['DJ_showname']    =   $_POST['DJ_showname'];
        }

Выход:

Примечание: неопределенная переменная: _SESSION в D: ..... \ main.php в строке 19

Примечание: неопределенная переменная: _SESSION в D: ..... \ main.php в строке 21

НУЛЕВОЙ

код pre_dump:

    function pre_dump($var)
{
    echo '<pre>';
    var_dump($var);
    echo '</pre>';
}

person Knarf    schedule 08.12.2010    source источник
comment
Звучит странно. А что насчет $GLOBALS['_SESSION']?   -  person Gumbo    schedule 08.12.2010
comment
Почему вы не сохраняете только 1 session_start?   -  person HoLyVieR    schedule 08.12.2010
comment
Вы используете PHP ‹4.1?   -  person Matthew    schedule 08.12.2010
comment
$ GLOBALS ['_ SESSION'] не работает   -  person Knarf    schedule 08.12.2010
comment
HoLyVieR: Я не знал, что у меня был другой session_start. Но когда я получил уведомление, я удалил его, а затем пришла другая странная ошибка.   -  person Knarf    schedule 08.12.2010


Ответы (4)


Я сам нашел ошибку. Где-то в моем скрипте была функция session_start (), которую я не заметил. Кажется, теперь все работает.

person Knarf    schedule 08.12.2010

Мне кажется, что unset($_SESSION); назывался.

person zzzzBov    schedule 08.12.2010
comment
Правильно, это вызовет оба предупреждения: session_start(); unset($_SESSION); session_start(); echo $_SESSION;. Я не знаю другого пути, кроме (маловероятной) ошибки PHP. - person Matthew; 08.12.2010
comment
Могло ли быть это? session_write_close (); - person Knarf; 08.12.2010
comment
Не сработало. Пытался удалить session_write_close () ;. Единственное, что произошло, это то, что я получил еще 5 уведомлений о том, что сеанс уже начался. - person Knarf; 08.12.2010
comment
Я попытался воссоздать свою ситуацию с помощью session_start (); var_dump ($ _ SESSION); и session_write_close (); в некоторых новых файлах php. Но не удалось воссоздать ошибку / уведомление. В заключение, это ошибка в моем скрипте, а не в самом PHP. - person Knarf; 08.12.2010
comment
если вы удалите session_write_close, вам не нужно будет снова вызывать session_start. Вам просто нужно не забыть закрыть сеанс после того, как вы закончите с ним. - person zzzzBov; 08.12.2010

Недавно я столкнулся с той же проблемой. Мне не удалось получить доступ к содержимому переменной $ _SESSION.

1) Это произошло в результате попытки доступа к переменной $ _SESSION до объявления session_start();. В моем случае я уже начал сеанс в файле header.php. Но я обращался к переменной $ _SESSION до оператора include. Пример;

<?php
 $username = $_SESSION['username'];
 //do some logical operation!!!
?> 
<?php include("header.php");?>

вместо того, чтобы делать что-то вроде этого

<?php include("header.php");?>
<?php
 $username = $_SESSION['username'];
 //do some logical operation!!!
?> 

2) Еще одна вещь, которая может вызвать эту проблему, возможно, невозможность начать сеанс в верхней части всех файлов, которым может потребоваться доступ к переменной $ _SESSION с использованием

session_start();

Надеюсь, это поможет любому, кто сталкивается с той же проблемой. Хотя это происходит поздно.

person user28864    schedule 15.02.2014

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

Не могли бы вы опубликовать код? Возможно, вы где-то отключили переменную (см. эту ссылку).

person littlegreen    schedule 08.12.2010
comment
Он не существует, если session_start() не был вызван (PHP 5.3.3). - person Matthew; 08.12.2010