在$ _SESSION中存储Doctrine对象

时间:2011-03-14 09:59:46

标签: php apache session doctrine

嘿 我此刻有一个神秘的问题...... 我的网站上有登录服务。 我使用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;

用户具有不同的属性,如国家/地区等。

所以我的问题是: 如果用户的字段Country为空(在数据库中),则登录正常...但如果用户被分配到一个国家(国家/地区只有id和名称),我的系统将失败。 在重定向之后,$ _SESSION中没有$ user 没有php错误或类似的东西......变量就消失了

将会话ID存储在会话中并在每次加载页面时加载用户会不会更好?

2 个答案:

答案 0 :(得分:5)

  

最好只将id存储在会话中并加载用户   每页加载?

不确定。用户数据可能已经在下一页加载时发生了变化,因此您显然需要刷新数据库中的数据,而不是从会话中读取用户的旧数据。

的引用:

PHP: Storing 'objects' inside the $_SESSION

答案 1 :(得分:0)

除非您找到某种方式使用_sleep and _wakeup存储对象的状态并在不丢失引用的情况下对其进行序列化,否则无法将对象放入会话中。

我确实会存储id并在下一次请求时重新检索它。