专家,
我刚刚发现Zend_Auth的一个奇怪的行为,因为它无法在服务器中存储会话。这突然发生在我使用Zend_Auth进行身份验证的所有现有应用程序中,因此我确信这不是代码的问题。基本上,每当用户成功通过身份验证(用户对象存储在会话中)并重定向到登录页面后,用户对象始终为NULL。
我使用Zend_Auth :: getInstance() - > getIdentity()从会话中检索用户对象,它始终为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
}
答案 0 :(得分:3)
听起来服务器上的/ tmp文件夹已满,这意味着如果您使用的是基于文件的会话,则会话将始终为空。看看你是否可以确认它。
此代码段将告诉您磁盘在机器中的充满程度:
echo `df -h`."\n";
此代码段将确认您是否正在使用文件及其存储位置。
echo ini_get('session.save_handler')."\n";
echo ini_get('session.save_path')."\n";
如果第二个ini_get有'无值',那么它将默认为/ tmp
如果保存路径位于您的主文件夹中,那么您可以自己清除,但如果保存路径位于/ tmp或其他系统文件夹中,则需要进入您的托管服务提供商。