php session_destroy浏览器记住用户名和密码

时间:2011-07-08 21:18:40

标签: php

我正在使用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();
?>

我错过了什么?谢谢你的帮助!

3 个答案:

答案 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。这将阻止用户通过按后退按钮重新提交表单。