【问题标题】:Is it bad to put the User struct in the session?将 User 结构放入会话中是不是很糟糕?
【发布时间】:2018-03-15 13:58:30
【问题描述】:

我在看这篇博文:http://nithinbekal.com/posts/phoenix-authentication/

还有将用户 ID 放入会话的部分。但是,当您想要访问该用户时,您需要使用该 ID 来查找它。

  conn
  |> put_session(:current_user, user.id)
  |> put_flash(:info, "Logged in")
  |> redirect(to: "/")

将整个用户结构放在会话中会有什么不好?那会更简单吗?

  ...
  |> put_session(:current_user, user)
  ...

【问题讨论】:

  • 如果您在该结构中存储密码(甚至散列)并将其作为 cookie 发送,那么这是一个糟糕的主意。仅存储您需要且不会很快更改的数据,例如用户名、用户电子邮件,但不要存储权限等数据。

标签: elixir phoenix-framework


【解决方案1】:

Phoenix 会话默认存储在 cookie 中,并且 cookie 的大小限制为 4K。虽然大多数(如果全部)现代浏览器都支持更大的 cookie 文件大小,但 RFC 2109 仍然定义了 4096 字节的限制,在将整个结构存储在会话中时可能会超过这个限制。

【讨论】:

  • 所以只要user小于4K就可以了。即使它更大,现代浏览器仍然会支持它吗?
  • 无法保证,胖 cookie 并不是用户想要的,所以我会坚持存储id
  • 感谢您的回复。那么权衡是我们需要在每次需要获取用户时查询数据库。我查看了 cmets 和作者对此权衡的回应:The solution here is to store the User struct rather than just the id in the session. 这不是一个合理的选择吗?
  • @PeteJ 如果您将整个用户结构放入会话中,那么如果用户的数据发生变化怎么办?如果我错了,请纠正我,但是您还必须在更新用户个人资料后管理会话中数据的失效。那么节省查询数据库的成本真的不值得。
猜你喜欢
  • 1970-01-01
  • 2018-01-20
  • 2011-07-25
  • 2012-02-25
  • 2010-10-18
  • 2011-10-06
  • 2019-12-06
  • 1970-01-01
  • 2011-09-20
相关资源
最近更新 更多