使用cookie和会话的组合来保持用户登录是一个好主意

时间:2017-03-19 18:47:43

标签: php session cookies session-cookies

我正在考虑设置一个选项以保持用户登录的可能性。现在我了解一个会话可以用来允许用户在不重新输入每个页面上的登录信息的情况下导航,直到浏览器关闭会话丢失了。 Cookie将存储在客户端,并具有持续时间,直到它过期或用户删除cookie。

我在想我可以使用两者的组合

  1. 创建数据库表(id,user_id,cookie_token,is_active)
  2. 用户登录在db表中创建一行,将用户连接到存储在客户端浏览器(系统)上的cookie_token。

    • 每次创建令牌时,请检查创建令牌的用户是否已在系统中拥有任何活动令牌,并在创建新令牌之前将其设置为非活动状态。
    • 每个用户只能激活一个令牌
  3. 因此,每次用户访问该站点时,系统都会查找该令牌并检查is_active字段, 如果找到user_token且is_active = 1或true,则检索用户数据(id,name等),然后创建会话和会话变量。

    我无法找到任何使用两者结合的问题或答案,所以可能是这只是矫枉过正或者是一个非常糟糕的主意,我刚刚开始阅读会话和cookie并且一直试图想我可以自己实现一个系统,所以很高兴知道这是好还是坏。

1 个答案:

答案 0 :(得分:0)

我不能再作为评论回复,因为我的回复太长了...... 我已经实现了类似下面的内容。不幸的是,我无法准确地记住它,但它会给你一个很好的主意:

手动登录前访问:

  • 开始会话。
  • 成功登录后,将用户标识存储到此会话中,并将标记值存储到dB和Cookie中。

下次浏览器访问该页面时:

  • (重新)开始会议。
  • 检查此会话中是否设置了用户标识。
    • 如果是,请自动登录与标识匹配的用户。
    • 如果不是(会话因时间限制或浏览器关闭而过期),请检查cookie中是否存储了令牌值,以及此值是否与存储在dB中的令牌值相匹配。
      • 如果找到(未到期)匹配,请自动登录用户并删除旧令牌。
      • 如果用户标识无效且令牌值无效/已过期:
        • 注销用户(其中​​包含所有要返回"公共"模式,例如销毁会话,删除令牌,Cookie等)。