PHP $_SESSION 变量不会持续存在——为什么不呢?

标签 php arrays session

在我的应用程序的每个页面上调用的第一行代码是:

<?php require_once('../../_includes/initialize.php'); ?>

该文件调用我的类,包括SESSIONSESSION 类在将任何内容输出到浏览器之前调用 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/

相关文章:

javascript - Ajax 返回带有额外 readyState、responseText、status 和 statusText 的 JSON 对象

ios - 在 Swift 中为 PageViewController 创建 UICollectionView 数组

php - 为我的 CodeIgniter 应用程序中的现有数据添加验证不起作用

php - Dompdf 样式不起作用

C指针和数组问题

javascript - sessionStorage 和粘性 session

python - 有没有一种简单的方法可以让 flask 中的 session 超时?

php - mysql转mysqli函数困难

php - utf8_(en|de)code 从 php7 中删除?

php - 关闭 session 而不写入或销毁它