首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CakePHP用户锻造会话

CakePHP用户锻造会话
EN

Stack Overflow用户
提问于 2012-01-11 19:08:35
回答 2查看 315关注 0票数 1

在我的cakePHP应用程序中,我正经历着一种奇怪的行为。在某种投票制度中,我有以下几点:

代码语言:javascript
复制
$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,在这种情况下,一个ID不存在?

EN

回答 2

Stack Overflow用户

发布于 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.UserAuth.User.id。您可以执行一个debug($this->Session->read())来检查是否正确地从Session挖掘了值。

通常,在我的应用程序中,我使用AuthComponent来获取登录的user.id。这是非常可靠的,因为这是由Cake自动设置的,如果您使用他们内置的AuthComponent::login方法,那么Cake将在用户会话过期(或注销)后将其取消设置,因此您可以依赖它来检查用户是否已登录。

我建议你如下:

代码语言:javascript
复制
$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

阅读更多信息:

  • AuthComponent::user方法(Cake 1.3)
  • AuthComponent::user方法(Cake2.0)

干杯

票数 0
EN

Stack Overflow用户

发布于 2012-01-15 14:56:23

问题解决了。这是注册过程中的一个错误。有一个步骤,新用户可以返回到更改/添加信息,然后再点击最后的“确定”。

错误地设置了一个与未来(但尚未创建)用户ID的会话。此时,如果该用户试图投票,他将拥有一个有效的会话,但该会话的用户并不存在。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8825190

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档