Хранение объекта Doctrine в $ _SESSION - PullRequest
3 голосов
/ 14 марта 2011

Эй, у меня таинственная проблема на данный момент ... У меня есть сервис входа на мой сайт. Я использую Doctrine как ORM. Когда пользователь вводит правильную комбинацию для имени пользователя и пароля, я пытаюсь сохранить полученный пользовательский объект в моем сеансе для последующей цели.

$user = new models\User;
$user = $em->getRepository('models\User')->findOneBy(array(
           'username' => $this->input->post('username'),
           'password' => hash("sha512", $this->input->post('password'))
           ));

   if($user != NULL) {
        session_start();
        $_SESSION['user'] = $user;
    redirect('user');
    }

это часть моего логина

       /**
         * @ManyToOne(targetEntity="Country")
         * @JoinColumn(name="country_id", referencedColumnName="id")
         */
        private $country;

пользователь имеет различные атрибуты, такие как страна, адрес и т. Д.

поэтому моя проблема: если поле Страна является нулевым (в БД) для пользователя, логин работает нормально ... но если пользователь назначен на страну (страна имеет только идентификатор и имя), моя система завершается ошибкой. после перенаправления нет $ user в $ _SESSION Там нет ошибки PHP или что-то вроде этого ... переменная просто исчезает

Может быть, лучше просто сохранить идентификатор в сеансе и загружать пользователя при каждой загрузке страницы?

Ответы [ 2 ]

5 голосов
/ 14 марта 2011

не лучше ли просто сохранить идентификатор в сеансе и загружать пользователя при каждой загрузке страницы?

Конечно.Пользовательские данные могли измениться уже при загрузке следующей страницы, поэтому вам, очевидно, необходимо обновить данные из базы данных, а не читать старые данные пользователя из сеанса.

ссылки:

PHP:Хранение «объектов» внутри $ _SESSION

0 голосов
/ 14 марта 2011

Если вы не найдете способ сохранить состояние вашего объекта с помощью _sleep и _wakeup и сериализовать его без потери ссылок, вы не можете помещать объекты в сеанс.

Я бы действительно занялся сохранением идентификатора и восстановил его по следующему запросу.

...