2014-10-02 232 views
0

不工作,我不理解爲什麼這個下面的代碼沒有進行重定向,我已經破壞了會話,因此病情應該是真實的,但它不是重定向到這個頁面,爲什麼頁面重定向在PHP

<?php 
    session_start(); 

    if(!isset($_SESSION['userid'])) { 
     header('Location: Login.html'); 
     exit; 
    } 
?> 

但在註銷php重定向工作正常。

<?php 
    session_start(); 
    session_destroy(); 
    header('Location: Login.html'); 
    exit; 
?> 

編輯

我可以看到Chrome開發工具中的重定向呼叫,但它實際上不是重定向 enter image description here

請幫助我理解我的代碼中的錯誤。

+1

在打開'<?php'標記後立即向文件頂部添加錯誤報告 'error_reporting(E_ALL); ini_set('display_errors',1);'看看它是否產生任何東西。 – 2014-10-02 15:41:40

+1

'isset'不檢查值是否爲真。它檢查密鑰是否存在...所以如果$ _SESSION ['userid']'有但是是false,它不會重定向。您應該使用'empty'代替。 – Cfreak 2014-10-02 15:41:43

+0

http://stackoverflow.com/questions/18539403/chrome-cancels-cors-xhr-upon-http-302-redirect,http://code.google.com/p/chromium/issues/detail?id=103458 ,http://serverfault.com/questions/363275/chrome-caching-302-redirects – 2014-10-02 15:49:54

回答

0

確保在<?php之前沒有空白,因爲這會阻止您設置任何標頭屬性。

0

明確地做unset($_SESSION['userid']);應該就足夠了。

的頁面session_destroy()狀態

session_destroy()銷燬所有與當前會話相關的數據。它不會取消設置與會話關聯的任何全局變量,也不會取消設置會話Cookie。要再次使用會話變量,必須調用session_start()。

爲了完全消滅會話,就像登錄用戶一樣,會話ID也必須取消設置。如果使用cookie傳播會話標識(默認行爲),則必須刪除會話cookie。 setcookie()可用於此目的。