在我的cakePHP应用程序中,我正经历着一种奇怪的行为。在某种投票制度中,我有以下几点:
$user_id = ($this->Session->check('User')) ? $this->Session->read('User.id') : 0;
$data = array(
'id' => NULL,
'user_id' => $user_id,
'object_id' => $this->params['form']['object_id'],
'datetime' => date('Y-m-d H:i:s')
);
$this->Votes->create();
$this->Votes->save($data);如您所见,如果没有设置$_SESSION['User'],则user_id将为零(0)。否则,用户登录时将创建用户ID.用户会话。
这也允许未登录的用户投票,这是可以的。
问题是.以某种方式挽救了与user_id != 0 (即假定存在和记录在案的成员)的一堆选票。当我检查用户ID时,它们不存在于user表中。
就像有人用随机的用户ID发送选票。ID甚至不存在!
重要的是要指出:
有人知道我是不是漏掉了什么吗?我是在假设不对的事情吗?一个人如何伪造一个用户ID,在这种情况下,一个ID不存在?
发布于 2012-01-12 02:59:02
(基于CakePHP 2.0.5,但也适用于Cake1.3.x)
首先,如何设置用户会话?你说User session is created when the user logs in是什么意思?
如果您正在挖掘AuthComponent设置的AuthComponent,那么它实际上是Auth.User和Auth.User.id。您可以执行一个debug($this->Session->read())来检查是否正确地从Session挖掘了值。
通常,在我的应用程序中,我使用AuthComponent来获取登录的user.id。这是非常可靠的,因为这是由Cake自动设置的,如果您使用他们内置的AuthComponent::login方法,那么Cake将在用户会话过期(或注销)后将其取消设置,因此您可以依赖它来检查用户是否已登录。
我建议你如下:
$user_id = $this->Auth->user('id');
$data = array(
'id' => NULL,
'user_id' => $user_id,
'object_id' => $this->params['form']['object_id'],
'datetime' => date('Y-m-d H:i:s', time())
);
$this->Votes->create();
$this->Votes->save($data);如果没有有效的用户会话,您的$user_id将是一个数字,或者是NULL。
阅读更多信息:
干杯
发布于 2012-01-15 14:56:23
问题解决了。这是注册过程中的一个错误。有一个步骤,新用户可以返回到更改/添加信息,然后再点击最后的“确定”。
错误地设置了一个与未来(但尚未创建)用户ID的会话。此时,如果该用户试图投票,他将拥有一个有效的会话,但该会话的用户并不存在。
https://stackoverflow.com/questions/8825190
复制相似问题