在我的每个应用程序页面上调用的第一行代码是:
<?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变量不会持续存在?
答案 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表单帖子使会话保持活动状态,直到用户启动“注销”例程或关闭浏览器
我偏爱第二种方法。我经常使用它,效果很好!!!!