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 会话被破坏