unset以某种方式破坏了所有完全不同的会话


unset somehow destroys all absolutely different sessions

我有一个严重的问题。

有一个小PHP系统,它包含管理面板和客户面板。这些面板必须彼此独立运行。

例如-如果管理员注销,客户必须呆在里面,等等。

有我的logout.php脚本(由logout按钮javascript处理程序调用):

<?php
require_once("./setup/additional_functions.php");
require_once("./setup/mysql_settings.php");
session_start();
$functionName = filter_input(INPUT_GET, "functionName");
if($functionName == "logoutAdmin") {
   initiateLogout("um_status", "users_managers", "um_id", $_SESSION['admin_id'], "admin");
} else if($functionName == "logoutCustomer") {
   initiateLogout("customer_visit", "users_customers", "customer_id", $_SESSION['cust_id'], "../customer");
} else {
    echo "Unknown error!";
}
function initiateLogout($loginTime, $tableName, $id, $sessionName, $backPage) {
    $sqli = new sqlSettings();
    $sql = "SELECT ". $loginTime ." FROM ". $tableName ." WHERE ". $id ." = ". $sessionName;
    $result = $sqli->setConnection()->query($sql);
    $user = $result->fetch_array();
    $timestamp = $user[$loginTime] - 300;
    $sql = "UPDATE " .$tableName. " SET " .$loginTime ." = ". $timestamp. " WHERE " .$id ." = ". $sessionName;
    $result = $sqli->setConnection()->query($sql);
    $_SESSION = array();
    if (isset($_COOKIE[session_name()])) {
        setcookie(session_name(), '', time() - 50000, '/');
    }
    unset($sessionName); 
    //redirect_to($backPage);
    echo "../" . $backPage;
} 

?>

$_SESSION['admin_id']和$_SESSION['customer_id']中的数据-完全不同但无论如何,当我点击(例如)管理端的按钮时,客户也会注销!!!不应该是这样的。

如何避免这种情况?将非常感谢任何帮助!!

您不需要将$_SESSION设置为空数组。

您需要将相应的$_SESSION密钥设置为null或插入它。

对于客户来说,这将是unset($_SESSION['cust_id']),对于管理员来说,这是unset($_SESSION['admin_id'])

您当前的代码会破坏将客户和管理员帐户注销的整个会话。

嗯,我认为我的错误是在我的本地计算机上测试整个系统。因为如果你做了同样的事情-会话是在一个浏览器和一台电脑上创建的。由谁登录并不重要。在我将系统放置在远程服务器上并从不同的"点"测试旧代码之后,一切都很完美。