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

如何仅在用户关闭/离开php中网站的所有页面时销毁会话?,php,Php,我的网站有5个页面,分别是page1.php、page2.php、page3.php、page4.php、logout.php page4.php有一个登录表单,上面有一个php脚本,用于捕获登录表单中的用户输入并将其放入会话中,然后将用户重定向到他来自的我的站点页面(通过使用标题('location:'.$_session['page']);或者如果他不是来自任何页面,例如,他第一次访问的页面是page4.php,然后将他重定向到page1.php。最上面的有session_start() P

我的网站有5个页面,分别是page1.php、page2.php、page3.php、page4.php、logout.php

page4.php有一个登录表单,上面有一个php脚本,用于捕获登录表单中的用户输入并将其放入会话中,然后将用户重定向到他来自的我的站点页面(通过使用标题('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链接logout.php销毁所有会话并重定向到该会话所在的页面时,再次设置$_session['page'],即使所有页面都已关闭,也不会被销毁。所以,下一次如果用户第一次访问page4.php并登录,他将被重定向到上次访问该站点时的页面。我想如果用户关闭所有页面(如果他打开了多个站点页面选项卡),然后第一次访问page4.php,他将被重定向到page1.php。
只有当站点的所有页面都关闭时,我如何销毁会话?

是否要使用
会话取消设置()
清除所有
$\u会话
。对于特定的
$\u会话
变量,请使用
unset($\u会话['whatever'])

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


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

?>
如果我理解你的权利,你希望会话数据被清除,这样它就不会使用注销后的旧页面

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


在现代PHP中不起任何作用。它只作用于,这是一个过时的功能,在现代代码中永远不应该使用。即使他注销了,他仍然希望留在网站上而不登录,这就是为什么如果他再次想要重新登录,$_SESSION['page')仍然需要的原因,这样在重新登录后,他将被重定向到该页面。因此,我想在且仅当用户关闭会话的所有页面/选项卡时销毁会话site@user1906399:那么你为什么要首先破坏会话?这不能用PHP来完成,因为它无法知道选项卡是否仍然对其他页面开放。您可以使用AJAX每隔几秒钟用页面名称ping一次服务器,然后在注销时可以看到上次ping是在什么时候进行的,如果在计划的ping间隔后没有发生ping,您可以相当确定没有选项卡仍然打开。顺便说一句,如果用户选择注销,他希望注销,而不是让其他选项卡保持登录。那将使注销变得毫无意义。只是我的想法。如果您想在注销后保留页面,请设置cookie,使其不依赖于会话。@hakre:假设我在page3.php中,我喜欢该页面,所以我想登录,因此我单击了登录链接,该链接将我带到page4.php,登录表单在那里,登录后,我被重定向回page3.php。现在我注销了。第二天我又回到了网站,但我首先打开了表单页面,即page4.php,进行登录,现在,登录后,我再次进入page3.php。如果我首先通过表单页面进入,我希望被重定向到page1.php而不是page3.php。这就是我需要销毁会话的原因。虽然在登录时销毁现有会话是一种有效的策略,但恐怕这对OP没有帮助:他需要弄清楚如何销毁会话对。