PHP不在$_SESSION中存储字符串


PHP does not store strings in $_SESSION

我在$_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::sessionInfoNameUserDetails::sessionInfoXXXXYYYY是在类UserDetails 中定义的常量

问题显然与session_start()无关,因为您已经明确表示,当您显式设置数组键时,它可以工作。

您必须按照以下步骤确定问题所在:

  1. 打印UserDetails对象并确保正在检索的值已设置,还确保它们是public
  2. 打印$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;