当我尝试注销会话时,我仍然可以进入该页面并查看详细信息,而无需先使用Mozilla浏览器后退按钮或历史记录缓存登录。
注销代码是
<php
session_start();
session_unset($_SESSION['user']);
//redirect to login page
header('location:login.php');
session_write_close();
?>
members page.
<php
if(!isset($_SESSION['user'])||(trim($_SESSION['user']==''))){
require('error.php');
}
else{
require('view.php');
//the function queries the db.
member_detail($user,$password);
}
在此代码中,如果我使用该页面的链接,它将转到错误页面,但如果我登录,则会显示成员详细信息,因为会话处于活动状态,因此登出后出现问题。
答案 0 :(得分:0)
首先确保使用session_destroy函数销毁会话或取消设置整个会话数组。
并在注销后打印测试页中的会话数组。这将为您提供哪些会话变量。使用isset方法检查会话变量是否存在。
答案 1 :(得分:0)
有时session_unset和session_destroy不会清除会话数据。
参考:http://www.dmxzone.com/forum/topic/14240/
我有类似的经历。也许是因为没有正确使用这些方法。
<强>的QuickFix:强>
如果要取消设置特定会话变量:
$_SESSION["variable"]="";
那将'取消它'
取消整个SESSION
$_SESSION=array();
我真的不知道这些是推荐的编程实践有多有效,但是,它们对我有用。
来自manuals
如果未设置全局变量() 在函数内部,只有本地 变量被破坏了。变量in 呼叫环境将保留 与unset()之前相同的值 调用。
session_destroy()会破坏所有的 与当前相关的数据 会话。它没有取消任何一个 与...相关的全局变量 会话,或取消设置会话cookie。 要再次使用会话变量, 必须调用session_start()。
为了杀死会话 总而言之,喜欢将用户注销, 会话ID也必须取消设置。如果 一个cookie用于传播 会话ID(默认行为),然后 必须删除会话cookie。 setcookie()可以用于此。
也许其他用户可以为此答案添加更多内容。另外,php.net的手册中包含示例代码的非常丰富的评论。