2013-05-05 73 views
1

我有一個PHP login並註銷腳本,我試圖實現的是,當用戶單擊註銷鏈接時,他完全註銷,無論單擊後退按鈕瀏覽器,並且不希望用戶訪問page.they應該被重定向到login頁面從網站完全註銷用戶

這是登錄功能

function loggedin() { 
    if (isset($_SESSION['user_id']) && !empty($_SESSION['user_id'])) { 
     return true; 
    } else{ 
     return false; 
    } 
} 

,這是我註銷腳本

<?php 
include 'includes/connect.php'; 
include 'includes/functions.php'; 

session_destroy(); 
header('location: index.php'); 

?> 

我該如何做到這一點?

+0

這取決於你如何實現這一目標。例如,在你的問題中,根本不確定什麼是登錄。你需要澄清,否則它只是猜測。 – hakre 2013-05-05 09:29:46

+0

您是否在詢問*「如何在PHP中銷燬會話*」?也許http://stackoverflow.com/questions/3113223/how-to-destroy-the-php-session-with-one-button? - 您現在已經在現場使用了很多現有材料,到底做了什麼?請具體參考並明確哪些部分具體不適用於您。如果您尚未嘗試任何現有解決方案,請現在先做。 – hakre 2013-05-05 09:30:07

+0

當用戶訪問頁面時,檢查會話是否已設置。如果會話未設置,則將其重定向到登錄頁面。 – coolboy 2013-05-05 09:26:56

回答

1

你可以寫檢查,如果用戶登錄在一個通用的功能,如果不只是重定向他們這樣

function isLoggedIn(){ 

    if (isset($_SESSION['user_id']) && !empty($_SESSION['user_id'])){ 

     //do what you want 

    } else{ 
     header("location:youloginpage.php"); 

    } 
} 
2

您可以刪除所有Cookie

if (isset($_SERVER['HTTP_COOKIE'])) { 
    $cookies = explode(';', $_SERVER['HTTP_COOKIE']); 
    foreach($cookies as $cookie) { 
     $parts = explode('=', $cookie); 
     $name = trim($parts[0]); 
     setcookie($name, '', time()-1000); 
     setcookie($name, '', time()-1000, '/'); 
    } 
} 

http://www.php.net/manual/en/function.setcookie.php#73484

如果您有一組用於登錄身份驗證的cookie名稱,則應該僅使用它們來重複循環。

+0

我應該把它放在我的註銷腳本中 – cleo 2013-05-05 09:49:55

2

問題是從網站並沒有完全退出,用戶只需我怎麼破壞PHP會話,所以我的答案會更復雜一些。

由於您使用PHP的$_SESSION功能來處理用戶會話,所以您可以特別將當前會話ID綁定到用戶帳戶。然後,您可以輕鬆強制會話過期。

例如,在用戶數據庫中創建一個新字段,並將其稱爲active_session_id或其他東西。每次用戶登錄時,都將session_id()輸出保存到它。然後在loggedin()函數中檢查當前請求的session_id()是否與用戶登錄時保存的請求匹配,如果不匹配,該函數將返回false,因此這就是虛擬結束用戶會話的方式。即即使它實際上仍然存在,它將不再有效。

值得注意的是,上面的解決方案應該是一種one-to-one關係,即一個用戶將只能有一個活動會話。如果你想允許用戶同時來自不同的地方,你必須通過創建一個新的表格來維護一個one-to-many關係。 users_sessions並在那裏保存會話ID。請不要在當前用戶表中創建其他字段,如active_session_id_1active_session_id_2等,因爲它不被認爲是一種好的做法。

希望這有助於

1

如果沒有更多的指定你的問題,我們只能假設PROCEDE。無論如何,因爲你正在使用的會話,如果你想破壞數據包含與否,檢查功能,如果用戶登錄這是不明確的,可以修改這種方式:

function loggedin() { 
    if (isset($_SESSION['user_id']) && is_numeric($_SESSION['user_id']) && ($_SESSION['user_id'] > 0)) { 
     return true; //user is logged in 
     //other operations to be performed 
    } else{ 
     return false; //user is NOT logged in 
     //other operations to be performed 
    } 
} 

註銷功能可能只是這樣的:

function logout() { 
    if (isset($_SESSION['user_id']) && is_numeric($_SESSION['user_id']) && ($_SESSION['user_id'] > 0)) { 
     $_SESSION['user_id'] = -1; //"unsets" the user, while not destroyng session 
    } else{ 
     return false; //user is already logged out - do nothing 
    } 
}