PHP $ _SESSION变量不会持久 - 为什么不呢?

时间:2009-12-11 20:41:50

标签: php arrays session

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

<?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的数组)。这是完美的。

但是,如果我不再点击新页面上的照片,并移动到另一个页面,它会返回错误 - 所以$ _SESSION变量已被删除。


SOOOOOOOOO *******

为什么哦为什么$ _SESSION变量不会持续存在?

3 个答案:

答案 0 :(得分:3)

$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;

答案 1 :(得分:0)

好吧,目前它看起来并不像你正在合并数组。我假设您在删除的代码中执行此操作,但我看到您设置$photos然后设置$_SESSION[photo_holder']。因此,每次点击提交时,$_SESSION['photo_holder']都不会附加值(或删除未经检查的值)。相反,它被$ photos中的任何内容覆盖。

答案 2 :(得分:0)

我与$ _SESSION混淆了一小部分但收效甚微。我建议

1)使用cookie来跟踪客户端的会话

OR

2)使用HTML表单帖子使会话保持活动状态,直到用户启动“注销”例程或关闭浏览器

我偏爱第二种方法。我经常使用它,效果很好!!!!