代码之家  ›  专栏  ›  技术社区  ›  rhodesjason

php$\u会话变量不持久-为什么不持久?

  •  2
  • rhodesjason  · 技术社区  · 15 年前

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

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

    那个文件调用我的类,包括 SESSION . 这个 会话 类调用 session_start() 在将任何内容输出到浏览器之前。

    在一个页面上,我使用的表单有大量的复选框,都带有名称 photo_select . 我将照片分成15组,然后在顶部提交用于分页的输入。

    我的目标是抓住 $_POST 每当用户移动到一个新页面并跟踪它们时,变量都会出现。唯一复杂的是名为 光选择 ,它保留任何选定复选框及其值的数组(我已将其设置为每个复选框的照片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张照片并单击到另一个页面,它会返回为真(并且$\u session变量存储了一个由3张照片ID组成的数组)。这是完美的。

    但是,如果我不再单击新页面上的照片,并移动到另一个页面,它将返回为false——因此,$u会话变量已被删除。


    苏欧欧欧欧欧欧欧欧欧欧欧欧欧欧欧欧欧欧欧欧欧欧欧欧欧欧欧欧欧欧欧欧欧欧欧欧欧欧欧欧欧欧欧欧欧欧欧欧欧欧欧欧欧欧欧*******

    为什么,$会话变量不持久?

    3 回复  |  直到 15 年前
        1
  •  3
  •   Svetlozar Angelov    15 年前
    $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;
    
        2
  •  0
  •   Jeff Rupert    15 年前

    好吧,现在看起来不像是你在合并数组。我假设您是在删除的代码中执行此操作,但我看到您设置了 $photos 然后设置 $_SESSION[photo_holder'] .所以,每次我点击Submit, $_SESSION['photo_holder'] 未附加值(或删除已取消选中的值)。相反,它会被$photos中的任何内容覆盖。

        3
  •  0
  •   bng44270    15 年前

    我只在很少成功的情况下处理了一小部分$\u会话。我也推荐你

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

    2)在用户启动“注销”例程或关闭浏览器之前,使用HTML表单文章保持会话活动

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