如果两个用户都登录了,但脚本不同,则两个用户都退出


both users log out if both logged in but different script

<?php
session_start();
session_destroy();
header("location:/index.php");
?>

嗨。我的程序中有一个注销脚本,如下所示。我有2个用户登录我的系统,Admin和Customer。问题是,当两个用户都登录时,我单击登出链接,例如在客户页面中,两个用户都登出。这个问题的解决办法是什么?谢谢。

根据您的问题,我猜您正在同一浏览器上测试管理员和客户。如果是这样的话,那么除非你正在做一些事情,比如使用Chrome的隐身窗口为其中一个,你保存相同的PHPSESSIONID为客户端和管理员。这意味着一个呼叫session_destroy();,两个呼叫session_destroy();

如果两个用户使用相同的浏览器登录到同一台计算机,那么您通过调用session_destroy()来清除整个会话的会话数据。在PHP中,会话表示用户代理(浏览器)和服务器之间的一对一关系。

我很难想象一个实用的系统,两个不同的人可以在同一时间通过同一个浏览器登录。一般来说,登录系统一次只处理一个用户。与标准系统相比,这里有一个不寻常的设置。我建议重新考虑您的登录过程,以便您的系统每次会话只处理一个用户

但是,如果确实有可能两个用户同时登录,那么您需要分别在$_SESSION变量中跟踪他们的状态。当其中一个注销时,不要破坏会话,只需清除该用户的状态:

//logout.php
$logout_type = isset($_GET['type']) ? $_GET['type'] : false;
// check for a bunk logout_type, redirect if type isn't valid
if ($logout_type === false || ($logout_type != 'user' && $logout_type != 'admin'))
  header("location:/index.php");
session_start();
// if this type's state isn't even set, then this isn't valid
if (isset($_SESSION['login_state'][$logout_type]) || $_SESSION['login_state'][$logout_type] == false)
  header("location:/index.php");
//set the state as false
$_SESSION['login_state'][$logout_type] = false;
  header("location:/index.php");

链接到登出页面时,请使用logout.php?type=userlogout.php?type=admin。当有人登录时,请确保设置适当的login_state会话变量。

现在,在任何需要检查登录状态的地方,像这样检查:

if (isset($_SESSION['login_state']['user']) && $_SESSION['login_state']['user'] == true) {
 /* user is logged on */
}
if (isset($_SESSION['login_state']['admin']) && $_SESSION['login_state']['admin'] == true) {
 /* admin is logged on */
}