2014-01-31 165 views
0

我讀過一些主題,比如:PHP會話摧毀試圖摧毀未初始化會話

Error — session_destroy() — Trying to destroy uninitialized sessionWarning: session_destroy(): Trying to destroy uninitialized sessionWarning: 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

閱讀計算器這個問題的這一回答
why session destroy not working
把這個代碼在你的PHP文件的首末

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


您打電話給session_destroy()兩次。
或刪除服務器上的所有會話...

+1

我實際上在我的文件中使用該功能,但我忘了在這個文件中使用。它解決了。謝謝。 – user3243925

+0

我很感謝。我在社區維基模式上寫這個。而你的接受不給我排名。請稍後再說......;) – 2014-01-31 11:12:40

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(); 
     } 
    } 

如果cookie數據是無效的,也可能是因爲沒有餅乾。這樣,如果它無效,它會檢查它是否存在。如果它確實存在並且無效,那麼它會執行某些操作。如果沒有,它會做其他事情。