在我的应用程序的每个页面上调用的第一行代码是:
<?php require_once('../../_includes/initialize.php'); ?>
该文件调用我的类,包括SESSION
。 SESSION
类在将任何内容输出到浏览器之前调用 session_start()
。
在一个页面上,我使用的表单包含大量复选框,所有复选框的名称均为 photo_select
。我将照片分成 15 张一组,然后在顶部提交输入以进行分页。
我的目标是每当用户移动到新页面时捕获 $_POST
变量并跟踪它们。唯一复杂的是名为 photo_select
的复选框数组,它保存任何选定复选框及其值的数组(我已将其设置为每个复选框的照片 ID)。
每次单击分页提交按钮之一时,我都需要获取提交的复选框数组并使用 array_merge
将其与先前选定的复选框的保存数组组合起来,以便我跟踪所有页面中所有选定的照片。
我不想发布到临时数据库以节省查询数据库的时间。将正在运行的选择数组保留在 $_SESSION
变量中会略微提高性能。
为了测试这一点,我有以下代码:
if( isset( $_POST['page'] ) ) {
// Picking up the form data and assigning it to variables
... variables
$photos = $_POST['photo-select'];
$_SESSION['photo_holder'] = $photos;
}
echo isset($_SESSION['photo_holder']) ? 'true' : 'false';
解决方案:
change line:
$_SESSION['photo_holder'] = $photos;
to:
if(isset($_POST['photo-select']) && !empty($_POST['photo-select'])) { $_SESSION['photo_holder'] = $photos; }
例如,如果我选择 3 张照片并单击到另一个页面,它会返回 true(并且 $_SESSION 变量存储 3 个照片 ID 的数组)。这是完美的。
但是,如果我不再单击新页面上的照片并移动到另一个页面,它会返回 false - 因此 $_SESSION 变量已被删除。
太棒了********
为什么哦为什么 $_SESSION 变量不会持续存在?
最佳答案
$photos = $_POST['photo-select'];
$_SESSION['photo_holder'] = $photos;
如果$_POST['photo-select'];
未定义$_SESSION['photo_holder']
变得不好
编辑: 如果有人想自己尝试一下
session_start();
$_SESSION['test'] = 2;
if (isset($_SESSION['test']))
echo 2;
$_SESSION['test'] = $_POST['a']; //missing POST variable
if (isset($_SESSION['test']))
echo 2;
关于PHP $_SESSION 变量不会持续存在——为什么不呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1890751/