2014-10-24 3 views
0

Я сошел с ума!Как уничтожить начатую сессию без предупреждения?

function initialize() { 
session_start(); //EDITED 
if(blnSessionIsStarted() && !session_destroy()) // Destroy session on disk 
    return false; 
... 
if(!blnSessionIsStarted() && !session_start()) //EDITED 
    return false; //EDITED 
} //EDITED 

function blnSessionIsStarted() 
{ 
//From: http://uk3.php.net/manual/en/function.session-status.php#113468 
if (php_sapi_name() !== 'cli') { 
    if (version_compare(phpversion(), '5.4.0', '>=')) { 
    return session_status() === PHP_SESSION_ACTIVE ? TRUE : FALSE; 
    } else { 
    return session_id() == '' ? FALSE : TRUE; 
    } 
} 
return FALSE; 
} 

В моем месте, это возвращает

PHP WARNING (2): session_destroy(): Trying to destroy uninitialized session 

В blnSessionIsStarted(), session_id() содержит не пустую строку сеанса, следовательно, функция возвращает истину. Я использую PHP 5.3.10. Я хочу избавиться от этого предупреждения, но везде, где я читал, используемый код кажется лучшей практикой. Я что-то упускаю?

EDIT Следуя советам некоторых пользователей и просматривая их отзывы, я добавил некоторые отредактированные строки. Однако теперь он возвращает другую ошибку (уведомление) «PHP NOTICE (8): сеанс уже запущен - игнорирование session_start()».

Но эти изменения несущественны: почему blnSessionIsStarted() возвращает true, даже если сеанс еще не запущен, и если да, то как точно определить, что сеанс запущен, без принудительного вызова session_start() до? И почему есть уведомление, которое вызывается при повторном вызове session_start() и как определить, что вызов session_start() не может быть вызван, хотя blnSessionIsStarted() говорит, что он больше не запускается?

+0

Вы называете 'session_start()' в любом месте? перед вызовом 'initialize()'? – Kleskowy

+0

@ Клесковы прав! запустите сеанс перед вызовом 'initialize()' или перед функцией if() in initialize() –

ответ

0

Сначала необходимо позвонить, session_start();. Сейчас нет сеанса.

Смежные вопросы