最近接手一個已經上線的項目。這個系統只有登入沒有登出功能。為了保證session不過期,所以用了header的方式來保存session。
我接手後就要求既能登入又能登出。所以就需要在登出的時候清楚session。
登入是這樣寫的
function authenticate()
{
header('WWW-Authenticate: Basic realm="REGISTRATION FOR HR"');
header('HTTP/1.0 401 Unauthorized');
echo "You must enter a valid login ID and password to access\n";
exit;
}
在登錄出的時候用session_unset 加 session_destroy是可以清除掉session。但是無法清除保存在cookie的用戶名密碼。$_SERVER['PHP_AUTH_USER']是清除不掉的。
!isset($_SESSION['hr']) && !isset($_SERVER['PHP_AUTH_USER'])
若缺少後者的判斷,則會一直提示authenticate的提示框。即使輸入的帳號是正確的。
因此,決定放棄這種做法,手動保存session。
但是也出現了個問題。若使用session_unset 加 session_destroy清除掉session後,權限好像亂了。而logout的時候session沒了。但是重新登錄session的role好像依然保持著上一個登錄的用戶的role。最後解決:在login之前採用unset($_SESSION['role'])。釋放掉session。有點莫名其妙的感覺。