3

当会话存储在默认的 php 会话存储中时,有什么方法可以删除用户会话?

例如,我是网站管理员,我想禁止登录用户。用户认证状态存储在会话中。我正在从数据库中删除用户行,但仍然记录了用户,并且所有必要的身份验证信息也存储在会话中。我需要删除/修改会话。

可能的方式:

  • 在每个请求上从数据库加载用户的行
  • 创建文件,表示删除用户的会话并在每个请求时检查此文件是否存在
  • /dev/shm 中的 crete 文件(检查速度非常快),但重新启动时文件将被删除
  • 在数据库中存储会话(我的项目的开销)
  • 在 nosql(redis、memcachedb)中存储会话(我的项目的开销)

除了将用户的会话存储在数据库或 nosql 数据存储中之外,还有什么优雅的方法吗?

4

1 回答 1

0

我知道如何做到这一点的唯一方法是删除会话记录。如果是文件,请删除会话文件。如果会话存储在数据库或内存缓存中,请将其删除。棘手的问题是如何找到会话 id 以及是否存在一个用户。

如果它是一个文件,并且您在其中存储了电子邮件或用户 ID,则可以查找该文件。数据库中的会话存储应该易于查询。不知道你会如何在内存缓存中做到这一点。

如果您不在每个请求上重新生成会话,则始终可以将会话创建时的 session_id 设置为用户独有的东西——如果您不使用 SSL,您可能会打开一种劫持会话的方法,如果您使用唯一密钥使用很容易猜到(如 user_id)。然后,您可以在用户登录时将用户会话 ID 与用户记录一起存储在数据库中。

于 2012-11-16T19:40:19.570 回答