gpt4 book ai didi

session - 允许用户永远保持登录状态——不同的实现方式

转载 作者:行者123 更新时间:2023-12-01 12:55:43 24 4
gpt4 key购买 nike

我正在开发一个应用程序,我想为用户提供一种永远保持登录状态的可能性。如果他选中一个框,他的 session 将永远不会结束,除非他手动注销或删除 cookie。如果他不这样做,他的 session cookie 将在关闭浏览器时过期。

我考虑了三种方法来实现这一点,但它们都各有利弊:

  • 使用用户名和他的散列密码保存一个 cookie:
    • 优点:用户可以在不同设备上进行多个事件 session 。
    • 缺点:如果 cookie 被第三方泄露,他们可以随时重新生成他的 session ,除非他更改密码。
  • 生成一个 token ,它将存储在数据库和用户的 cookie 中。然后比较它们:
    • 优点:一旦用户注销, token 将被随机化并且他的所有 session 都将被销毁。他肯定会被注销。
    • 缺点:用户永远只能使用一台设备登录。一旦他从另一台设备登录并接受永远登录,他的其他 token 将被覆盖。
  • 仅假设:在服务器上永久保存 session ,并向用户提供不会过期的 cookie。
    • 缺点:这可能不现实,因为您无法以高效的方式存储那么多数据。

我目前更喜欢第二种方式,因为它不像第一种那样不安全,而且易于实现。但我仍然不相信它,而且我已经看到有经过验证的框架可以以另一种方式做到这一点。

您能想象另一种可能更好的方法吗?你最喜欢什么,为什么?

最佳答案

切勿将密码保存在 cookie 中。第二种方法很好,我认为您会发现大多数应用程序都是通过这种方式实现此功能的。请注意, session 存储不必是数据库。 cookie 包含一些唯一的(不可猜测的!)id,这个 id 指向一些唯一的存储。它可以是某处目录中的文本文件、数据库行、memcached 中的 JSON 字符串,等等。

Pro: As soon as the user logs out, the token will be randomized and all of his sessions will be destroyed. He will definitely be logged of.

Con: The user can only log in forever with one device. As soon as he logs in from another device, accepting to be logged in forever, his other token will be overwritten.

不要将 token ID 作为列存储在用户表中。而是创建一个新的交叉表,允许每个用户有多个 session 。因此,每台设备都将拥有自己独立的 token ,因此拥有自己独立的 session ,可以单独管理。

当用户注销时,您只会销毁那个 cookie 及其关联的 session 存储。用户未完成的任何其他 session 将保持不变。

关于session - 允许用户永远保持登录状态——不同的实现方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9930018/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com