我正在使用php身份验证方法进行摘要身份验证,如php manual所示。除注销部分外,一切正常。
我正在使用session_destroy()
尝试将用户注销,这样做。但问题是,如果用户在关闭浏览器之前重新登录,则不会提示他们输入用户名和密码,他们会自动使用他们输入的用户名和密码重新登录。
似乎凭据以某种方式被浏览器记住了。在Firefox中,如果我在尝试重新登录之前手动清除“清除浏览历史记录”中的“活动登录”,则会提示输入用户名和密码,即使用户已使用session_destroy()
注销。
我也使用an example from the php manual来清除Cookie,但这似乎没有帮助,它似乎不是cookie问题。
这是我的logout.php代码
<?php
session_start();
$_SESSION = array();
//destroy cookie if it exists
if (ini_get("session.use_cookies")) {
$params = session_get_cookie_params();
setcookie(session_name(), '', time() - 42000,
$params["path"], $params["domain"],
$params["secure"], $params["httponly"]
);
}
//destroy session
session_destroy();
header("location:form.php");
exit();
?>
我错过了什么?谢谢你的帮助!
答案 0 :(得分:4)
HTTP Auth与会话身份验证略有不同。 清除http Auth会话的唯一可能是更改领域名称。 检查http://www.php.net/manual/en/features.http-auth.php#100396(评论#100396)这是我发现的地方。
BTW:使用会话进行身份验证要容易得多,您可以更多地存储用户信息等。因此,如果httpAuth没有特定原因,您可能会更好地使用会话。答案 1 :(得分:0)
session destroy不会删除会话中存储的项目 您可以手动取消设置:
function destroySession(){
foreach($_SESSION as $k => $v)
unset($_SESSION[$k]);
session_destroy();
}
答案 2 :(得分:0)
你说当他们推回时,他们会再次登录。当你通过重新发送登录表单推回时,你确定他们实际上没有再次登录吗?在您的登录功能中,最后,尝试执行:
header("location: ".$_SERVER['REQUEST_URI']);
或者调整他们登录时需要访问的URI。这将阻止用户通过按后退按钮重新提交表单。