logout.php后在所有浏览器中结束会话

时间:2018-08-05 04:23:42

标签: javascript php

我目前在我的logout.php上有这个

<?php
//LOGOUT.PHP
session_start(); 

//// unset all $_SESSION variables
session_regenerate_id();
session_unset();
session_destroy();

$_SESSION['logoutsuccess'] = 'You have successfully logged out.';
header("Location: index.php");
exit;

但是在使用changepassword.php更改密码之后,该密码最后带有logout.php。它只是破坏当前选项卡上的会话。但这不会破坏其他浏览器/标签上的会话。 TIA!

3 个答案:

答案 0 :(得分:1)

执行以下操作:

$_SESSION = array(); 
session_destroy(); 
setcookie (session_name(), '', time()-3600); 

答案 1 :(得分:0)

您可以尝试

 //LOGOUT.PHP
session_start(); 

//// destroy all $_SESSION variables

session_destroy();

echo "<script>alert('You have successfully logged out.')</script>";
echo "<script>window.open('index.php','_self')</script>";

答案 2 :(得分:0)

就纯PHP而言,要尝试做的事情并不容易。在这种情况下,JavaScript将成为您的朋友。

如果要实现此目的,我将在JS中创建一些内容,该内容与后端每x秒/分钟进行一次检查,以查看密码是否已更改。这将需要一个专门用于此检查的单独端点。

以下是我考虑做的一个粗略概述:

  • 当用户登录时,使用用户名和哈希密码使用$userAuthHash = sha1("{$username}${password_hash})之类的东西创建该数据的哈希,并将其保存在用户会话中。

  • 在您的页面中(可能在标题中更多)显示创建的哈希。通常最好在标头(例如:<meta name="user_auth_hash" content="<?php echo $userAuthHash; ?>">)中的meta标记中执行此操作。显然,您可以根据需要进行设置,只要您可以使用JS进行查找即可。

  • 让JS脚本从meta标记获取哈希值,并且每个x间隔将其发送到验证端点。端点应以某种方式指示用户令牌是否仍然有效。

  • 如果用户令牌不再有效,则可以让JS脚本根据需要将用户重定向到注销脚本。

执行此操作的方法很多,但是这是我所知道的最简单的方法之一。

还要记住,在构建软件时不要过分考虑这些事情。安全性很重要,但请设想一下帐户被黑客入侵并且黑客方更改密码的情况。您现在的合法用户已经注销,那绝对没有好处。在这种情况下,您需要评估您的初始策略,并可能实施一封电子邮件,以迫使用户在将密码更改保存到数据库之前验证密码更改。只是需要一些思考。