我已经为登录系统创建了 session 表,当用户成功登录时,会生成一个随机 session key 并与登录用户的用户 ID 关联,并且在 session 表中我添加了一个到期时间列,其默认值为时间戳当前 + 一小时后,即如果时间为 17:10:32,则该列中的时间将为 18:10:32。所有这些都添加到数据库中。登录时会检查 session key ,这次是通过以下命令检查的:
“SELECT * FROM active_sessions where session_key = :session and expirytime > NOW()”
我的问题是,在 session 过期的情况下(即 expirytime 列的时间已过期),如果有人更改了他的计算机时间,那么我上面的查询将变为 true,并且将使用过期的 session 。
其次, session 只能在创建 session 的设备上工作(以防止窃取 cookie 并在其他设备中使用它们)。谢谢您
最佳答案
Now() 将返回服务器时间,因此用户更改本地时间不会影响到期流程。
为了确保 session 仅适用于发起计算机,可能需要做一些事情:
- 将 session ID 与某个 token 相关联。
- 捕获用户代理、IP 地址等并将其与 session 详细信息一起存储在数据库中。
- 同时验证 IP 和用户代理等的 session 和过期检查。
这些不会为您提供 100% 的保护,但您将有一些开始。
关于php - 验证 session 和 mysql 时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35505725/