-1

我的网站有 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。仅当站点的所有页面都关闭时,我如何销毁会话?

4

3 回答 3

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

?>

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

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

于 2012-12-16T08:58:24.433 回答
0

在设置任何新会话之前,当用户首先登录站点时首先销毁所有会话是否有意义?只要您不需要前一页中的任何内容,加载的每个新页面也是如此。显然,您将需要您的登录会话,因此您不会破坏该会话。

于 2012-12-16T08:55:43.697 回答
-1

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

于 2012-12-16T08:53:40.030 回答