php - 验证 session 和 mysql 时间

标签 php mysql session cookies

我已经为登录系统创建了 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/

相关文章:

php - htmlentities() 是否足以创建 xml 安全值?

mysql - 下面哪个数据库表设计比较好?

javascript - 商店谁提交了表格?

javascript - 需要一些关于 PHP Session 多维数组到 Javascript 的建议

mysql - SQL JOIN 查询 - 链接四个表

php - 使用 Laravel Session 和表进行 Wordpress 身份验证

php - 如何使用 Mail::send() 获取 Mandrill 消息 ID - Laravel 4

php - 如何使用 jQuery 访问 JSON 的多级对象

PHP 将 select 语句分配给下拉列表值

python - 如何在 Django Admin 中禁用按主键排序?