在PHP中结束会话

时间:2013-09-09 19:10:30

标签: php

我在结束会话中遇到问题,我有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变量。

2 个答案:

答案 0 :(得分:6)

我要采取疯狂的刺,并说this answer将解决你的问题。

根据PHP Docs For session_destroy()

  

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

     

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

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

$_SESSION = array();

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

答案 1 :(得分:3)

您可能还想在其中添加session_start()

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

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