如何在用户关闭/离开php中网站的所有页面时销毁会话?

时间:2012-12-16 08:49:45

标签: php

我的网站有5页,page1.php,page2.php,page3.php,page4.php,logout.php。

page4.php有一个登录表单,上面有一个php脚本,用于从登录表单中捕获用户输入并将其放入会话中,然后将用户重定向到我来自的网站页面(通过使用header('location:'。$ _ SESSION ['page']);),或者如果他不是来自任何页面,即他的第一个访问页面是page4.php然后将他重定向到page1.php。最顶层的是session_start();

Page1.php,page2.php和page3.php代码:

<?php
 session_start();
 $_SESSION['page'] = $_SERVER['PHP_SELF'];
 // also have a link to click to go to page4.php if not logged in and a link to   
 //logout.php
?>

logout.php的代码:

<?php 
session_start();
session_destroy();
header('location: '.$_SESSION['page']);
?>

问题是当用户点击注销链接logout.php销毁所有会话并重定向到它来自的页面时,它再次设置$ _SESSION ['page']并且即使所有页面都关闭也不会被销毁。所以下次如果用户第一次访问page4.php并登录,他上次访问该网站时他正在重定向到该页面。我希望如果用户关闭所有页面(如果他打开了多个网站页面选项卡),那么首先访问page4.php,他将被重定向到page1.php。   如果网站的所有页面都关闭,我该如何销毁会话?

3 个答案:

答案 0 :(得分:1)

<?php 
session_start();
$temp = $_SESSION['page'];
$_SESSION = array();
session_destroy();
header('location: '. $temp);

?>

如果我理解正确,您希望清除会话数据,以便在注销后不会使用旧页面。

关于如何正确结束会话的PHP.net示例:

答案 1 :(得分:0)

当用户在设置任何新会话之前首先登录到站点时,首先销毁所有会话是否有意义?只要您不需要上一页中的任何内容,每个新页面都会加载相同的内容。显然你需要登录会话,所以你不会破坏那个会话。

答案 2 :(得分:-1)

您想使用session_unset()清除所有$_SESSION。对于特定的$_SESSION变量,请使用unset($_SESSION['whatever'])