【问题标题】:Assigning array reference to session variable将数组引用分配给会话变量
【发布时间】:2014-06-08 22:00:39
【问题描述】:

我正在尝试将数组引用分配给 php $_SESSION 变量,但无法使其工作。

考虑一个简单的形式:

<html>
   <body>
      <FORM action="post.php" method="post">
      User name: <INPUT type="text" name="user"><br>
         <INPUT type="submit" value="Submit">
      </FORM>
   </body>
</html>

post.php 在哪里:

<?php
session_start();
if( !empty( $_POST ) ) {
   $data=array();
   $data['user']=$_POST['user'];
   $data['pass']='xxxx';
   $uid="1234";
  $_SESSION[$uid] = &$data;
   header( 'HTTP/1.1 303 See Other' );
   header( 'Location: post.php?id='.$uid );
   exit();
}
if( isset( $_GET[ 'id' ] )) {
   $uid=$_GET[ 'id' ];
   $user=$_SESSION[$uid]['user'];
} else {
   exit();
}
?>
<html>
   <body>
    <?php
       echo "<p>Username: ".$user."</p>";
    ?>
   </body>
</html>

我在生成的 post.php?id=1234 文件中得到一个空的用户名。我在这里缺少什么?

【问题讨论】:

  • 不要通过引用将任何内容分配给会话:在您访问会话时的下一个请求中,该变量将不再存在,因此引用指向任何内容

标签: php arrays session


【解决方案1】:

当然你得到的是空的用户名。

该变量在脚本之后被“删除”,因此引用指向“垃圾”。

只需将数组分配给变量。

$_SESSION[$uid] = $data;

您不能对会话变量使用“数值”。会话机制使用变量注册。名为“1234”的变量无效,因为它不能以数值开头。所以会话无法创建变量,因为它是“无效的”。

您必须为数值添加前缀或使用另一个数组,例如:

$_SESSION["users"][$uid] = $data;

【讨论】:

  • 谢谢!当然..但是该字段仍然是空的..如果我取var_dump of $_SESSION 我得到:array(2) { ["error"]=&gt; string(0) "" ["count"]=&gt; int(0) }.. (计数字段可能来自使用相同会话的一些早期调试,我不知道在哪里error 字段来自).. 也许我必须编写一个循环将$data 的每个字段分别分配给$_SESSION 变量?
  • 谢谢!很高兴知道:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-09-22
  • 2018-09-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-12
  • 2023-03-04
相关资源
最近更新 更多