1

在用户使用他的帐户登录后,我正在尝试在我的程序中设置会话。如果用户输入了正确的电子邮件和密码,则程序设置一些变量,如下所示:

$_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;

没有更多的警告。它首先设置数组,然后将整个数组设置为会话变量,它工作,但我不知道我的第一个代码中的问题在哪里,所以也许有更好理解的人可以更好地解释它。

4

3 回答 3

1

我试过这个:

$user = array('id' => $row['id'], 'email' => $email, 'admin' => $row['admin']);
$_SESSION['user'] = $user;

没有更多的警告。它首先设置数组,然后将整个数组设置为会话变量,它工作,但我不知道我的第一个代码中的问题在哪里,所以也许有更好理解的人可以更好地解释它。

似乎 $_SESSION['user'] 以某种方式设置为字符串,不知道为什么,但这是唯一的解释。

于 2014-01-02T00:22:07.353 回答
0

这种类型的错误可能是由于尝试使用对象或数组作为索引键来访问数组索引。检查您的阵列是否正确。

于 2013-09-10T09:23:29.657 回答
0

尝试这个:

在代码开头的某个地方

if(!isset($_SESSION['user'])){
  $_SESSION['user'] = array();
}

然后您可以像以前一样继续为 $_SESSION['user'] 添加元素 ( $_SESSION['user']['id'] = ...)

于 2013-09-10T09:23:31.170 回答