数组作为会话变量

Posted

技术标签:

【中文标题】数组作为会话变量【英文标题】:Array as session variable 【发布时间】:2011-01-19 08:30:19 【问题描述】:

是否可以在 php 中使数组成为会话变量?

情况是我有一个表格(第 1 页),其中一些单元格具有指向特定页面的链接。下一页将有一个名称列表(第 2 页,我想将其保留在会话数组中)及其各自的复选框。提交此表单后,将进入交易页面(第 3 页,已发布复选框的值保存在数据库中以对应名称)。现在,如果我返回第一页并单击另一个单元格,会话数组将包含新名称列表还是旧名称列表?

【问题讨论】:

【参考方案1】:

是的,PHP 支持将数组作为会话变量。示例见this page。

至于您的第二个问题:一旦您设置了会话变量,它将保持不变,直到您更改它或unset 它。因此,如果第 3 页没有更改会话变量,它将保持不变,直到第 2 页再次更改它。

【讨论】:

如果您返回第一页并点击进入第二页(将数据放入会话中),会话数据将包含一组新数据。 示例页面的清单 13 是一个非常糟糕的示例。它使读者感到困惑。【参考方案2】:

是的,您可以将数组放入会话中,例如:

$_SESSION['name_here'] = $your_array;

现在您可以在任何您想要的页面上使用$_SESSION['name_here'],但请确保在使用任何会话函数之前放置session_start() 行,因此您的代码应如下所示:

 session_start();
 $_SESSION['name_here'] = $your_array;

可能的例子:

 session_start();
 $_SESSION['name_here'] = $_POST;

现在您可以像这样在任何页面上获取字段值:

 echo $_SESSION['name_here']['field_name'];

至于您问题的第二部分,除非您分配不同的数组数据,否则会话变量将保留在那里:

 $_SESSION['name_here'] = $your_array;

会话生命周期设置在 php.ini 文件中。

More Info Here

【讨论】:

太棒了。谢谢。【参考方案3】:
<?php // PHP part
    session_start();          // Start the session
    $_SESSION['student']=array(); // Makes the session an array
    $student_name=$_POST['student_name']; //student_name form field name
    $student_city=$_POST['city_id'];   //city_id form field name
    array_push($_SESSION['student'],$student_name,$student_city);   
    //print_r($_SESSION['student']);
?>

<table class="table">     <!-- html Part (optional) -->
    <tr>
      <th>Name</th>
      <th>City</th>
    </tr>
                                                        
    <tr>
     <?php for($i = 0 ; $i < count($_SESSION['student']) ; $i++) 
     echo '<td>'.$_SESSION['student'][$i].'</td>';
       ?>
    </tr>
</table>

【讨论】:

【参考方案4】:

首先使用 implode() 函数将数组更改为字符串。例如$number=array(1,2,3,4,5,...); $stringofnumber=implode("|",$number); 然后将字符串传递给会话。例如$_SESSION['string']=$stringofnumber; 因此,当您转到要使用数组的页面时,只需爆炸您的字符串。例如 $number=explode("|", $_SESSION['string']);finally number 是你的数组,但记得在每一页开始数组。

【讨论】:

以上是关于数组作为会话变量的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的数组计数存储在会话变量中会加倍?

如何将数组存储到php中的会话变量中

使用全局变量作为数据源的 PHP 会话副作用警告

Toastr 使用 Laravel 会话变量作为警报消息

根据数组中的值取消设置特定会话项

Laravel - 将部分会话内容添加到数组中