嘿 我此刻有一个神秘的问题...... 我的网站上有登录服务。 我使用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存储在会话中并在每次加载页面时加载用户会不会更好?
答案 0 :(得分:5)
最好只将id存储在会话中并加载用户 每页加载?
不确定。用户数据可能已经在下一页加载时发生了变化,因此您显然需要刷新数据库中的数据,而不是从会话中读取用户的旧数据。
的引用:
答案 1 :(得分:0)
除非您找到某种方式使用_sleep and _wakeup存储对象的状态并在不丢失引用的情况下对其进行序列化,否则无法将对象放入会话中。
我确实会存储id并在下一次请求时重新检索它。