Zend_Auth getidentity всегда возвращает ноль - PullRequest
2 голосов
/ 26 апреля 2011

Эксперты

Я только что обнаружил странное поведение 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
}

1 Ответ

3 голосов
/ 28 апреля 2011

Похоже, что папка / tmp на вашем сервере заполнена, что означает, что если вы используете файловые сессии, сессия всегда будет пустой.Посмотри, сможешь ли ты это подтвердить.

Этот фрагмент покажет вам, насколько заполнены диски в машине:

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

Этот фрагмент подтвердит, используете ли вы файлы и где они хранятся.

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

Если второй ini_get не имеет значения, то по умолчанию он будет иметь значение / tmp

Если путь сохранения находится в вашей домашней папке, вы можете очистить его самостоятельно, но если сохранениепуть находится в / tmp или какой-либо другой системной папке, вам нужно попасть на хостинг-провайдера.

...