无法从会话中注销

时间:2010-05-12 07:05:29

标签: php

当我尝试注销会话时,我仍然可以进入该页面并查看详细信息,而无需先使用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);
}

在此代码中,如果我使用该页面的链接,它将转到错误页面,但如果我登录,则会显示成员详细信息,因为会话处于活动状态,因此登出后出现问题。

2 个答案:

答案 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()之前相同的值   调用。

and

  

session_destroy()会破坏所有的   与当前相关的数据   会话。它没有取消任何一个   与...相关的全局变量   会话,或取消设置会话cookie。   要再次使用会话变量,   必须调用session_start()。

     

为了杀死会话   总而言之,喜欢将用户注销,   会话ID也必须取消设置。如果   一个cookie用于传播   会话ID(默认行为),然后   必须删除会话cookie。   setcookie()可以用于此。

也许其他用户可以为此答案添加更多内容。另外,php.net的手册中包含示例代码的非常丰富的评论。