我目前在我的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!
答案 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脚本根据需要将用户重定向到注销脚本。
执行此操作的方法很多,但是这是我所知道的最简单的方法之一。
还要记住,在构建软件时不要过分考虑这些事情。安全性很重要,但请设想一下帐户被黑客入侵并且黑客方更改密码的情况。您现在的合法用户已经注销,那绝对没有好处。在这种情况下,您需要评估您的初始策略,并可能实施一封电子邮件,以迫使用户在将密码更改保存到数据库之前验证密码更改。只是需要一些思考。