2014-01-31 3 views
0

Я прочитал несколько тем, как:PHP сессии уничтожают Попытка уничтожить UNINITIALIZED сессию

Error — session_destroy() — Trying to destroy uninitialized session, Warning: session_destroy(): Trying to destroy uninitialized session, Warning: session_destroy(): Trying to destroy uninitialized session with phpCas

И никто из них не помогают мне.

public function forbidden(){ 
    if(!isset($_SESSION)){ session_start(); } 

    if(!isset($_SESSION['email']) || !isset($_SESSION['id'])){ 
     $this->error_404(); 
    }else{ 

     if(!isset($_COOKIE['data'])){ 
      session_destroy(); 
      $this->error_404(); 
     } 

     if($_COOKIE['data'] != sha1($_SESSION['email'])){ 
      session_destroy(); 
      unset($_COOKIE["data"]); 
      setcookie("data", false, time() - 3600, '/'); 
      $this->error_404(); 
     } 
    } 
} 

Предупреждение: session_destroy() [function.session-уничтожить]: Попытка уничтожить неинициализированный сеанс

я получить эту ошибку на втором session_destroy();, сеанс инициализации, так что я не понимаете?

ответ

0

Прочитайте это ответы этого вопроса на StackOverflow
why session destroy not working
поместить этот код в первом и конце вашего PHP File

<?php 
ob_start(); 
?> 
Your Code Here... 
<?php 
ob_flush(); 
?> 


Ваш вызов session_destroy() дважды.
или удалены все сеансы на сервере ...

+1

Я фактически использую эту функцию в своих файлах, но забыл использовать в этом файле. Он решил. Благодарю. – user3243925

+0

Я благодарю. Я пишу это в режиме wiki сообщества. И ваше Принятие не дает ранга для меня. пожалуйста, пойте позже ...;) –

0

Вы звоните session_destroy() дважды.

Если ваш файл cookie не установлен, то он не будет равен $_SESSION['email'] не так ли?

Изменить код:

public function forbidden(){ 
    if(!isset($_SESSION)){ session_start(); } 

    if(!isset($_SESSION['email']) || !isset($_SESSION['id'])){ 
     $this->error_404(); 
    }else{ 

     if(!isset($_COOKIE['data'])){ 
      session_destroy(); 
      $this->error_404(); 
     } elseif($_COOKIE['data'] != sha1($_SESSION['email'])){ 
      session_destroy(); 
      unset($_COOKIE["data"]); 
      setcookie("data", false, time() - 3600, '/'); 
      $this->error_404(); 
     } 
    } 
} 
+0

Я полностью изменил код на то, что вы сказали мне, и я продолжаю получать ту же ошибку в одной строке (во второй 'session_destory()'). – user3243925

0

Проблема заключается в том, что вы называете сессии уничтожить дважды. Если $_COOKIE['data'] не установлен, то $_COOKIE['data'] != sha1($_SESSION['email']) также вернет false, и он попытается снова уничтожить сеанс.

if(!isset($_COOKIE['data'])){ 
     session_destroy(); 
     $this->error_404(); 
    } 

    if($_COOKIE['data'] != sha1($_SESSION['email'])){ 
     session_destroy(); 
     unset($_COOKIE["data"]); 
     setcookie("data", false, time() - 3600, '/'); 
     $this->error_404(); 
    } 

Произведите проверку в другом

 if($_COOKIE['data'] != sha1($_SESSION['email'])){ 
     if(!isset($_COOKIE['data'])){ 
     session_destroy(); 
     $this->error_404(); 
     } 
     else 
     { 
     unset($_COOKIE["data"]); 
     setcookie("data", false, time() - 3600, '/'); 
     session_destroy(); 
     $this->error_404(); 
     } 
    } 

Если данные куки не действует, это может быть потому, что нет печенья. Таким образом, если он недействителен, он проверяет, существует ли он. Если он существует и он недействителен, он что-то делает. Если это не так, это делает что-то еще.

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