我在$_SESSION
变量中存储一些数据时遇到了一个奇怪的问题。问题出在第8行和第9行之间。不知怎的,数据没有存储在会话中。我不知道问题出在哪里。
将$data
变量分配给会话时,它是有效的,但将$data
中的某些内容分配给会话则不起作用!但是第7行告诉我,访问$data
数组是可行的。
问题出在哪里?
此处链接是print_r($_SESSION)
的一个示例
代码:
1: $ldap = new adLDAP();
2: $ldap->authenticate($username, $password);
3: $ldapUser = $ldap->user();
4: $data = $ldapUser->info($username, $this->ldapInfo);
5: $managerArr = explode(',', $data[0]['manager'][0]);
6: $managerCN = explode('=', $managerArr[0]);
7: $this->log->debug("Display Name = " . $data[0]['displayname'][0]);
8: //$_SESSION['ldap_raw'] = $data; // <--- this freakin works
9: $_SESSION[UserDetails::sessionInfoName][UserDetails::sessionInfoTitleName] = $data[0]['title'][0];
10: $_SESSION[UserDetails::sessionInfoName][UserDetails::sessionInfoTelephoneNumber] = $data[0]['telephonenumber'][0];
11: $_SESSION[UserDetails::sessionInfoName][UserDetails::sessionInfoDisplayNameName] = $data[0]['displayname'][0]);
UserDetails::sessionInfoName
和UserDetails::sessionInfoXXXXYYYY
是在类UserDetails 中定义的常量
问题显然与session_start()
无关,因为您已经明确表示,当您显式设置数组键时,它可以工作。
您必须按照以下步骤确定问题所在:
- 打印
UserDetails
对象并确保正在检索的值已设置,还确保它们是public
- 打印
$data
以确保在阵列中设置了正确的级别。例如,您引用的是$data[0]['title'][0]
,实际上可能是$data[0]['title']
这可能只是您引用的变量/对象中的一个小错误,因为您的代码没有语法错误,因此打印这些数据应该可以揭示问题所在!
执行以下操作:
$ldap = new adLDAP();
$ldap->authenticate($username, $password);
$ldapUser = $ldap->user();
$data = $ldapUser->info($username, $this->ldapInfo);
$managerArr = explode(',', $data[0]['manager'][0]);
$managerCN = explode('=', $managerArr[0]);
$this->log->debug("Display Name = " . $data[0]['displayname'][0]);
// Print the $data array
print_r($data);
// Print the UserDetails object instance
print_r(UserDetails);
exit;