我正在尝试为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
文件中收到一个空用户名。我在这里缺少什么?
答案 0 :(得分:2)
当然你会得到空的用户名。
该变量在脚本之后被“删除”,因此引用指向“垃圾”。
只需将数组分配给变量。
$_SESSION[$uid] = $data;
您不能对会话变量使用“数值”。会话机制使用变量注册。名为“1234”的变量无效,因为它无法以数值开头。因此会话无法创建变量,因为它是“无效的”。
您必须为数值添加前缀或使用其他数组,如:
$_SESSION["users"][$uid] = $data;