【发布时间】:2016-11-23 19:09:56
【问题描述】:
起初我选择使用put_session 来存储用户ID,因为会话哈希不能被篡改。但是,似乎会话 cookie 仅在浏览器会话期间持续存在。当用户重新打开浏览器时,它就消失了,用户必须重新登录。
我读到另一种选择可能是为每个用户生成一个安全的随机令牌并将其存储在数据库中,并将其放入具有高过期日期的常规 cookie 中。但是,鉴于此 cookie 没有防篡改保护 AFAIK(但我可能错了)并且连接并不总是 https,我猜任何在用户和服务器之间监听 http 的人都能够劫持用户会话.
因此问题是如何以安全的方式在会话中保留用户 ID?或者还有什么其他方法?
【问题讨论】:
-
我无法给出详细的答案,但我可以给出正确的方向。您可以使用
Phoenix.Token(hexdocs.pm/phoenix/Phoenix.Token.html) 生成一个令牌,您将使用put_resp_cookie(hexdocs.pm/plug/Plug.Conn.html#put_resp_cookie/4) 将其存储为cookie。一旦有请求且用户未登录,请使用conn.cookies["remember_me"]查看带有令牌的记住我 cookie 是否可用并尝试验证它。 -
感谢您的解释,看来 Phoenix.Token 非常适合这种情况!