Zend_Auth getidentity всегда возвращает null

Эксперты,

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

person ronanray    schedule 26.04.2011    source источник
comment
Как хранятся идентификаторы сеанса? Вы недавно отключили файлы cookie? Прежде чем предположить проблему с сервером, происходит ли это в других браузерах / ПК?   -  person Basic    schedule 26.04.2011
comment
Да, это происходит у всех и отовсюду. Я не использую файлы cookie, и, как видите, данные записываются в сеанс путем вызова этого метода $ auth- ›getStorage () -› write ($ data);   -  person ronanray    schedule 26.04.2011
comment
В этом случае, я согласен, это похоже на проблему с сервером. В отношении идентификаторов я имел в виду следующее: при первом доступе к серверу что-то сохраняется на стороне сервера сеанса, а клиенту предоставляется уникальный идентификатор, также известный как идентификатор сеанса. Во второй раз, когда вы подключаетесь к серверу, клиент отправляет идентификатор сеанса вместе с запросом, и сервер использует его для поиска ранее сохраненных переменных сеанса. Убедитесь, что вашим клиентам отправляются идентификаторы сеанса (обычно в виде файлов cookie)   -  person Basic    schedule 26.04.2011
comment
@Basiclife - Я могу подтвердить, что это проблема сервера. Вчера я позвонил хостинг-провайдеру, и им удалось очистить хранилище сеансов на сервере. Спасибо за предложение.   -  person ronanray    schedule 29.04.2011


Ответы (1)


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

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

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

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

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

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

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

person Lucas    schedule 28.04.2011
comment
Когда диск заполнен, ваш идентификатор сеанса не будет меняться каждый раз, но у вас постоянно будут пустые сеансы. - person Lucas; 28.04.2011
comment
Сеанс хранится в / var / php / session, к которому у меня нет разрешения на доступ. И да, я могу подтвердить, что это проблема с сервером, поскольку вчера я звонил хостинг-провайдеру, и они сумели разобраться с этим. Теперь все работает гладко ... спасибо за предложение! ваше здоровье! - person ronanray; 29.04.2011