2013-04-06 57 views
4

我試圖理解會議,以及如何結束它們的一些功能工作。 我去過不同的網站/甚至在這裏SO和........基本上,沒有任何工作。PHP結束會話(不同的方式)我不明白

我有一個應用程序我嘗試上工作,當用戶登錄,我的用戶名存儲像這樣 (不會粘貼整個代碼,但你的想法)

if($row == 1){ 
    session_start(); 
    $_SESSION['usrname'] = $login_usrname; 
    $_SESSION['usrpass'] = $login_usrpass; 
    header("Location:index.php"); 
    exit; 
} 

在說應用程序的索引頁,我有像這樣

session_start(); 
if(!isset($_SESSION['usrname']) && !isset($_SESSION['usrpass'])){ 
    header("Location:login-acc.php"); 
    exit; 
} 

檢查,並讓他們在我檢查餅乾firefoxes web開發工具,我看到它產生這樣我就要說「其工作」到目前爲止, 。

現在,當我想註銷時,長話短說,我有一個註銷鏈接,將它們帶到一個應該清除所有會話數據並將其重定向到登錄頁面的頁面。當即時通訊測試應用程序,我點擊註銷鏈接,我被重定向到登錄頁面,但是當我回去並點擊「索引頁面」鏈接。它讓我權利。

在註銷文件,試圖FORCE問題在矯枉過正大聲笑,我有這個,似乎沒有任何工作。

unset($_SESSION['usrname']); 
unset($_SESSION['usrpass']); 

session_unset(); 

$_SESSION = array(); 
session_destroy(); 

setcookie('PHPSESSID', '', time()-3600,'/', '', 0, 0); 

header("Location:login-acc.php"); 
exit; 

它重定向我到登錄頁面,但再一次,當我手動去索引頁,它讓我在正確的,或者被重定向到登錄頁面後,我打的「返回」按鈕,並讓我的權利也是如此。

如果我然後進入FF Web開發人員工具應用程序並刪除所有的cookie等,並導航到索引頁,然後鎖定我。

正如你在上面看到的,我嘗試過多種事情,最後我把它們扔在一起,應該做些什麼.....我的問題是...因爲我放入所有這些函數來嘗試刪除/一般情況下取消/取消會議...我還能做什麼?我有點失去了它應該如何工作。

有人可以引導我在正確的方向嗎?

感謝先進。

+3

有你'在session_start()'之前這種破壞性的代碼? – 2013-04-06 20:19:45

+3

你應該**從不**保存會話中的用戶密碼!畢竟,唯一可能需要的是用戶名和/或ID來檢查用戶是否已登錄 – thaJeztah 2013-04-06 20:23:17

+0

是否謹慎使得在每個頁面中還要檢查數據庫,如果細節匹配或是一次夠了?並感謝提示@ thaJeztah – somdow 2013-04-06 20:25:27

回答

2

您在註銷頁面的頂部缺少session_start()。它試圖修改一個不存在的會話!

+0

你知道在所有的地方我曾經去過,從未見過,甚至認爲我不得不手動開始會話,然後摧毀它...我認爲它總是積極的....但是,謝謝這個工作。 (嘆氣)大聲笑。 – somdow 2013-04-06 20:23:23

1

您必須開始會話才能結束會話。我建議考慮看看...... http://php.about.com/od/advancedphp/ss/php_sessions_3.htm

// you have to open the session to be able to modify or remove it 
session_start(); 

// to change a variable, just overwrite it 
$_SESSION['size']='large'; 

//you can remove a single variable in the session 
unset($_SESSION['shape']); 

// or this would remove all the variables in the session, but not the session itself 
session_unset(); 

// this would destroy the session variables 
session_destroy();