会话变量影响 PHP 中其他会话变量的问题
Posted
技术标签:
【中文标题】会话变量影响 PHP 中其他会话变量的问题【英文标题】:Problem with a session variable affecting other session variables in PHP 【发布时间】:2021-12-30 13:04:13 【问题描述】:当我尝试使用$_SESSION['pageNumbers']
时,它会禁用其他持有值的会话变量:
与:
如果我注释掉$_SESSION['pageNumbers']
,其他会话变量工作正常
(“sixdigitpass”和“注销”按钮):
没有:
我在 header.php 中有session_start();
,但我不明白为什么它不允许我在不影响其他会话的情况下使用$_SESSION['pageNumbers']
。
谁能帮帮我?
代码
要获得每页的有限行数:
public function fetchAllStudents()
$outputPerPage = 20;
$sqlQuery = 'SELECT * FROM students';
$statement = $this->_dbHandle->prepare($sqlQuery);
$statement->execute(); // execute the PDO statement
$resultNumber = $statement->rowCount();
$_SESSION['pageNumbers'] = ceil($resultNumber/$outputPerPage); // ERROR DETECTED
if(!isset($_GET['page']))
$page = 1;
else
$page = $_GET['page'];
$currentFirstOutput = ($page-1)*$outputPerPage;
$sqlNewQuery = "SELECT * FROM students LIMIT " . $currentFirstOutput . ',' . $outputPerPage;
$statementNew = $this->_dbHandle->prepare($sqlNewQuery); // prepare a PDO statement
$statementNew->execute(); // execute the PDO statement
$statementNew->rowCount();
while ($row = $statementNew->fetch())
$dataSet[] = new StudentData($row);
return $dataSet;
显示分页:
<?php
if(isset($_SESSION['pageNumbers']))
for ($page = 1; $page <= $_SESSION['pageNumbers']; $page++)
echo '<a href="index.php?page=' . $page . '">' . $page . '</a> ';
?>
如果我使用$_SESSION['pageNumbers']
,下面有一些片段会受到影响
在登录时显示用户名:
Welcome, <?php if(isset($_SESSION['user_ID']))
echo explode(" ", $_SESSION['full_name'])[0];
else
echo " Guest";
?>
如果已登录,则从“登录”更改为“注销”:
<?php if(!isset($_SESSION['user_ID'])) : ?>
<a class="bb text-decoration-none" href="../../login.php">Login</a>
<?php else: ?>
<a class="bb" href="../../Models/Core.php?exit=logout">Logout</a>
<?php endif; ?>
【问题讨论】:
请粘贴代码,不要截图。 好的,我会的。 @MarkusZeller 我已将代码添加到问题中。 欢迎来到 Stack Overflow!请将您的代码直接复制并粘贴到帖子中,而不是链接或插入它的图像。要了解有关格式化的更多信息,请阅读:How do I format my posts using Markdown or html? 【参考方案1】:经过3个小时的手动调试,我找到了解决方案,显然在行前添加了session_start();
:
session_start(); // solution :)
$_SESSION['pageNumbers'] = ceil($resultNumber/$outputPerPage); // ERROR FIXED
我从不需要在任何函数中使用session_start();
。如果哪位专家能指出原因,我将不胜感激。
【讨论】:
参见 php 的session_start()
文档。 php.net/manual/en/function.session-start.php
当 session_start() 被调用或会话自动启动时,PHP 将调用打开和读取会话保存处理程序。这些将是默认提供的内置保存处理程序或由 PHP 扩展(例如 SQLite 或 Memcached)提供;或者可以是 session_set_save_handler() 定义的自定义处理程序。读取回调将检索任何现有的会话数据(以特殊的序列化格式存储)并将被反序列化并用于在读取回调将保存的会话数据返回给 PHP 会话处理时自动填充 $_SESSION 超全局变量。
由于您从未初始化会话,因此您的代码无法使用现有的会话信息。以上是关于会话变量影响 PHP 中其他会话变量的问题的主要内容,如果未能解决你的问题,请参考以下文章