【问题标题】:User table in database is changed, how to update session?数据库中的用户表已更改,如何更新会话?
【发布时间】:2013-09-20 15:40:31
【问题描述】:

当前,当用户登录我的站点时,会启动一个 (PHP) 会话,并且他的数据库行保存在他的 $_session 中。我这样做是因为现在用户数据的大小很小,这样我就不必每次需要时都向数据库询问用户数据。

问题是,当我想在开发过程中添加或更改某些内容并触摸数据库时,会话不会以这种方式更新。用户必须注销并再次登录才能更新会话。由于该网站处于开发阶段,所以目前这很好,但在生产中这是不可取的。

我不会删除会话文件,因为人们很懒惰,我会避免在每次数据库发生更改时强制他们重新登录,并且我不想每 X 分钟重新加载一次会话。我现在的解决方案是用户表中的布尔列,默认为 false,我在更改数据库时设置为 true。每次会话继续时,如果该值变为真,会话数据将被更新。无论如何,每次用户继续会话时,我都必须进行(小)查询。我不知道这是否会成为生产中的问题。

是否有替代/更好的方法来解决我的问题?

【问题讨论】:

  • 如果您在每个站点命中都访问数据库以检查“更新”字段是否已更改,那么您基本上通过在会话中缓存用户数据几乎几乎没有保存任何内容反正文件。您仍然会每次都访问数据库,因此您的设计已从 n 变为 n+1 查询。
  • 用户是唯一更新自己信息的人,还是会在他们的会话中存储外部数据,您需要考虑这些数据?
  • @MarcB: 是的,那是因为我不太相信我的方法 :)
  • @ChristopherMorrissey:“外部”数据到底是什么意思?
  • @LucasMalor 一些不受他们行为控制的事情,例如回复帖子、管理员升级他们的帐户等。

标签: php database session data-consistency


【解决方案1】:

如果我正确理解了这个问题,处理这个问题的一种方法是每次更新数据库中的用户行时,用户的会话数据也可以在 PHP 中更新。

如果不是用户更新记录(例如管理员更改用户权限),您很可能希望强制用户注销。如果是用户更新记录(例如更改用户配置文件中的信息),只需更新会话变量中的这些值就足够了。

在这两种情况下,您可能还想向用户提供一条消息,让他们知道发生了什么。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多