Почему не удалось уничтожить объект сеанса - PullRequest
12 голосов
/ 18 декабря 2011

Когда я использую session_destroy (), я получаю сообщение "Ошибка уничтожения объекта сеанса".

session_start();
if(isset($_SESSION['user_id'])){    
    $_SESSION=array();
    if(isset($_COOKIE[session_name()])){
        setcookie(session_name(),'',0,"/");
    }
    session_destroy();
}

Что вызывает эту ошибку?

Ответы [ 3 ]

17 голосов
/ 18 декабря 2011

Ошибка:

Предупреждение: session_destroy (): сбой уничтожения объекта сеанса

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

Оператор @ не всегда активен, например, с функциями сообщения об ошибках.

Edit:

1) Что вызывает эту ошибку?

Эта ошибка обычно возникает, когда PHP пытается удалить файл сеанса, но не может его найти.

В вашем случае с session_destroy есть только одно место в PHP , которое вызывает это. Именно тогда session.save_handler (см. Также session_set_save_handler) возвращает FALSE для действия destroy . Это может зависеть от того, какой тип сохранения вы используете, по умолчанию используется files . При этом, если настройка session.save_path неверна (например, недоступен каталог), это может вызвать такую ​​ошибку.

2) Почему "@" не подавляет ошибку?

Это зависит от того, как создается вывод, и от конфигурации PHP. @ не всегда работает. Например, обратные вызовы, зарегистрированные с set_error_handler, все равно будут получать эти сообщения.

0 голосов
/ 02 июня 2017

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

0 голосов
/ 27 июля 2016

В моем случае я пытался уничтожить сессию до того, как был создан cookie.Другими словами, я сделал что-то вроде:

session_start();
...
session_destroy();

Таким образом, у сервера не было возможности «связаться» с браузером до уничтожения сеанса.Простое решение, которое сработало для меня, было

session_start();
...
$_SESSION=array();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...