【问题标题】:Allow just one PHPSESSID per user每个用户只允许一个 PHPSESSID
【发布时间】:2015-03-09 03:12:41
【问题描述】:

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

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

  1. ts1i3plmdcnmoivai637a27oe1
  2. bhn1snms8kajmpo8ape5e5ctj3
  3. d5467idr1ree9dcq6h9cqt9oj2
  4. en2vbo1r62fqmrriid8l4rkvd3

所有这 4 个 ID 都是有效的。

有没有办法让这个 sessid 每个用户都是唯一的? 例如,当生成 ID#4 时,前 3 个被丢弃。然后我可以处理 403 错误或其他问题。

另一方面,第二个问题:

是否可以让这个 PHPSESSID 令牌更长?

【问题讨论】:

  • 跟踪发布的会话 ID,如果用户帐户分配了多个会话,您可以撤消其中一个。

标签: php security


【解决方案1】:

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

当有人登录时,您需要生成一个随机 cookie 密钥,我将把该随机 cookie 密钥称为 cookie_id。

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

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

您可以使用他的 cookie_id 验证登录用户。 注销时 cookie_id 将在 db 中为空。 当另一个登录发生时,新的 cookie_id 将覆盖 db 中的旧 cookie_id。 就是这样


您也可以使用 expire 参数设置 cookie 的期限:http://php.net/manual/en/function.setcookie.php

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

【讨论】:

猜你喜欢
  • 2012-06-02
  • 2020-03-01
  • 1970-01-01
  • 2014-10-11
  • 2015-03-12
  • 2015-11-03
  • 1970-01-01
  • 1970-01-01
  • 2014-02-11
相关资源
最近更新 更多