为会话变量分配数组引用

时间:2014-06-08 22:00:40

标签: php arrays session

我正在尝试为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文件中收到一个空用户名。我在这里缺少什么?

1 个答案:

答案 0 :(得分:2)

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

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

只需将数组分配给变量。

$_SESSION[$uid] = $data;

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

您必须为数值添加前缀或使用其他数组,如:

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