【发布时间】:2013-09-13 22:19:56
【问题描述】:
在用户使用他的帐户登录后,我正在尝试在我的程序中设置会话。如果用户输入了正确的电子邮件和密码,则程序设置一些变量,如下所示:
$_SESSION['user']['id'] = $row['id'];
$_SESSION['user']['email'] = $email;
$_SESSION['user']['admin'] = $row['admin'];
$_SESSION['logged'] = true;
问题是,我从上面的前三行代码中得到了这个警告:
警告:第 193 行 C:\Program Files (x86)\Zend\Apache2\htdocs\OOPeshop\user\User.php 中的非法字符串偏移 'id'
所以我检查了是否所有变量都已设置,所以我在代码中添加了这两行:
var_dump($row);
var_dump($email);
但看起来还不错,我得到了输出
array(2) { ["id"]=> string(2) "14" ["admin"]=> string(1) "0"}
字符串(22)“foobar@gmail.com”
那么有人可以解释一下问题出在哪里吗?我检查了类似的问题,但没有找到解决问题的方法。
我试过这个:
$user = array('id' => $row['id'], 'email' => $email, 'admin' => $row['admin']);
$_SESSION['user'] = $user;
没有更多警告。它首先设置数组,然后将整个数组设置为会话变量,它起作用了,但我不知道我的第一个代码哪里有问题,所以也许有更好理解的人可以更好地解释它。
【问题讨论】:
-
当你
var_dump($row['id'])时会发生什么? -
@Steven string(2) "14"
-
还有
var_dump($_SESSION)? -
我的代码上面:array(0) { } 和下面的代码 array(2) { ["user"]=> array(3) { ["id"]=> string(2) " 14" ["email"]=> string(22) "foobar@gmail.com" ["admin"]=> string(1) "0" } ["logged"]=> bool(true) }
-
那么这部分代码看起来没有问题......如果有那么
$_SESSION变量将不会被设置。您确定您正在查看正确的线路吗?如果你注释掉这些行会发生什么? (要么这样,要么我们的电线交叉!)