3

我在结束会话中有问题,我有我的会话开始的 MAIN.PHP,在我的 MAIN.php 里面我有<a href = "logout.php">logout</a>这是我的 logout.php 的代码

<?php
 unset($_SESSION['user']);
 unset($_SESSION['pass']);
 session_destroy();
 echo"<script> window.location.href = '../index.php' ; </script>";
 exit();
 ?>

单击链接注销后,当我按下后退按钮时,我仍然可以访问页面并且它仍然保存我的 SESSION 变量。

4

2 回答 2

8

我要大胆尝试并说这个答案将解决您的问题。

根据session_destroy() 的 PHP 文档

session_destroy()销毁与当前会话关联的所有数据。它不会取消设置与会话关联的任何全局变量,也不会取消设置会话 cookie。要再次使用会话变量,必须调用 session_start()。

为了完全终止会话,例如注销用户,还必须取消设置会话 ID。如果使用 cookie 传播会话 id(默认行为),则必须删除会话 cookie。setcookie() 可以用于此。

总结一下似乎是您的问题,讨厌的会话 cookie(标识会话)没有被取消设置。因此,当您点击后退按钮并session_start();出现在脚本顶部时,仍会引用全局会话变量。正如另一个答案所暗示的,请尝试:

$_SESSION = array();

清除所有全局会话数据。此外,正如文档所说,取消设置会话 cookie。

于 2013-09-09T19:28:16.653 回答
4

你可能也想session_start()在那里添加

session_start();
unset($_SESSION['user']);
 unset($_SESSION['pass']);
 session_destroy();
 header('Location: index.php');

另外,我个人更喜欢取消设置整个会话unset($_SESSION);,但每个人都有自己的做事方式

于 2013-09-09T19:17:32.363 回答