每个用户只允许一个PHPSESSID

时间:2015-02-14 14:40:03

标签: php security

我创建了一个Web服务,用户可以在其上登录发送oauth令牌。作为响应,此Web服务返回PHPSESSID cookie以保持用户登录。

但是,如果您多次登录,则每次都会生成一个新ID。例子:

  1. ts1i3plmdcnmoivai637a27oe1
  2. bhn1snms8kajmpo8ape5e5ctj3
  3. d5467idr1ree9dcq6h9cqt9oj2
  4. en2vbo1r62fqmrriid8l4rkvd3
  5. 所有这4个ID都有效。

    是否有任何方法可以使每个用户的此sessid唯一?因此,例如,当生成ID#4时,之前的3将被丢弃。然后我可以处理403错误或其他什么。

    另一方面,第二个问题:

    是否可以延长此PHPSESSID令牌?

1 个答案:

答案 0 :(得分:1)

如果你想要,那么最好使用你自己的cookie而不是php会话。

当有人登录时,您需要生成随机Cookie密钥,我会将该随机Cookie密钥称为cookie_id。

然后你需要将它与连接到的user_id一起存储在数据库中,这样你就可以在数据库中创建一个名为sessions的新表,包含cookie_id和user_id字段(user_id需要是唯一的),或者你可以扩展你的用户表与cookies_id字段。

使用db中的相关用户保存cookie_id值后,您将通过cookie将该cookie_id提供给该用户。

您可以使用他的cookie_id验证登录用户。 注销时,cookie中的cookie将为null。 当另一次登录时,新的cookie_id将被写入db中的旧cookie_id。 就是这样


您还可以使用expire参数设置Cookie的周期:http://php.net/manual/en/function.setcookie.php

为了更安全,您可以在一段时间后使用cronjobs从db中删除cookie ID。 (您需要存储登录日期才能这样做)

相关问题