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

Posted

技术标签:

【中文标题】unset 以某种方式破坏了所有完全不同的会话【英文标题】:unset somehow destroys all absolutely different sessions 【发布时间】:2016-02-08 21:44:55 【问题描述】:

我有一个严重的问题。

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

例如 - 如果管理员退出,客户必须留在里面,等等。

有我的 logout.php 脚本(由注销按钮 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 = array(); 将它们都注销了 我用 $_SESSION = array(); 注释了行.它没有任何影响。重复同样的事情。 嗯,有人能帮帮我吗?我仍然需要帮助! 【参考方案1】:

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

您需要将相应的 $_SESSION 键设置为 null 或将其插入。

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

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

【讨论】:

【参考方案2】:

好吧,我认为我的错误是在我的本地计算机上测试整个系统。因为如果您这样做 - 在一台浏览器和一台电脑期间创建会话由谁登录并不重要。在我将我的系统放在远程服务器上从不同的“点”测试我的旧代码后 - 一切正常。

【讨论】:

以上是关于unset 以某种方式破坏了所有完全不同的会话的主要内容,如果未能解决你的问题,请参考以下文章

当 Android 主屏幕 PWA 被杀死时,Cookie 会话被破坏

会话被 django-all auth 重置

防止会话劫持

session_unset() 是清除和重置 PHP 会话变量的正确方法吗?

PHP Unset 正在重置我的会话数组

重定向页面时突然会话数据被破坏