php - Zend_Auth getidentity 始终返回 null

标签 php zend-framework zend-auth

专家们,

我刚刚发现 Zend_Auth 的一个奇怪行为,它无法在服务器中存储 session 。对于我所有使用 Zend_Auth 进行身份验证的现有应用程序来说,这种情况突然发生,所以我确信这不是代码问题。基本上,每当用户成功通过身份验证(他的用户对象存储到 session 中)并且重定向到登陆页面后,​​用户对象始终为 NULL。

我使用 Zend_Auth::getInstance()->getIdentity() 从 session 中检索用户对象,它始终为 NULL。这种奇怪的行为只发生在实时服务器中,并且在我的计算机和登台服务器中一切正常。我只是想确保这只是服务器试图在这里搞笑,因为我一直在检查代码,但仍然一无所知。这是一个共享服务器,我没有太多访问权限。

这是我的代码:


// setup Zend_Auth adapter for a database table
Zend_Loader::loadClass('Zend_Auth_Adapter_DbTable');
$db = Zend_Registry::get('db');
$authAdapter = new Zend_Auth_Adapter_DbTable($db, 'Users', 'Email', 'Password', 'MD5(?) AND Active=1');
$authAdapter->setIdentity($email)
             ->setCredential($password);

// do the authentication
$auth = Zend_Auth::getInstance();
$result = $authAdapter->authenticate();

if ($result->isValid()) {
     // success : store database row to auth's storage system
     // (not the password though!)
     $userData = array('UID','Email','Username','FirstName','LastName','Email','School');
     $data = $authAdapter->getResultRowObject($userData, 'Password');
     $auth->getStorage()->write($data);

     $userData = get_object_vars($auth->getIdentity());
     if (!empty($userData)) {
         // redirect here
     } else {
         // show invalid
     }
} else {
         // show invalid
}

最佳答案

听起来您服务器上的/tmp 文件夹已满,这意味着如果您使用基于文件的 session ,该 session 将始终为空。看看能不能确认一下。

此片段将告诉您机器中的磁盘有多满:

echo `df -h`."\n";

此代码段将确认您是否正在使用文件以及它们的存储位置。

echo ini_get('session.save_handler')."\n";
echo ini_get('session.save_path')."\n";

如果第二个 ini_get 没有值,那么它将默认为/tmp

如果保存路径位于您的主文件夹中,则您可以自行清除该路径,但如果保存路径位于/tmp 或其他某个系统文件夹中,则您需要访问您的托管提供商。

关于php - Zend_Auth getidentity 始终返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5785431/

相关文章:

php - 使用 Twitter OAuth Echo 进行 verify_credential,如何获取电子邮件?

php - 为什么我必须使用 mb_convert_encoding($name ,'ISO-8859-15' ,'utf-8' ) 来显示重音字符?

php - Zend_Auth setCredentialTreatment

php - 实用的 Zend_ACL + Zend_Auth 实现和最佳实践

PHP - 嵌套 IF 语句

php - 我如何访问 CakePHP 的 app.php 中的 SESSION?

php - 准备好的语句绑定(bind)参数错误

php - Zend MVC - 摆脱公用文件夹

zend-framework - 在 Zend Form 中写入超链接?

doctrine-orm - Zend 2 + 学说 2 Auth 适配器