Php 结合使用cookie和会话来保持用户登录是一个好主意吗

Php 结合使用cookie和会话来保持用户登录是一个好主意吗,php,session,cookies,session-cookies,Php,Session,Cookies,Session Cookies,我正在考虑是否有可能设置一个选项来保持用户登录。现在我了解到,只有在浏览器关闭且会话丢失之前,会话才能允许用户在每个页面上导航,而无需重新输入登录信息。cookie将存储在客户端,并有一个持续时间,直到过期或用户删除cookie为止 我在想我可以把两者结合起来 创建一个db表(id、用户id、cookie标记、处于活动状态) 用户登录,在db表中创建一行,将用户连接到存储在客户端浏览器(系统)上的cookie_令牌 每次创建令牌时,检查为其创建令牌的用户是否在系统中已有任何活动令牌,并在创建新

我正在考虑是否有可能设置一个选项来保持用户登录。现在我了解到,只有在浏览器关闭且会话丢失之前,会话才能允许用户在每个页面上导航,而无需重新输入登录信息。cookie将存储在客户端,并有一个持续时间,直到过期或用户删除cookie为止

我在想我可以把两者结合起来

  • 创建一个db表(id、用户id、cookie标记、处于活动状态)
  • 用户登录,在db表中创建一行,将用户连接到存储在客户端浏览器(系统)上的cookie_令牌

    • 每次创建令牌时,检查为其创建令牌的用户是否在系统中已有任何活动令牌,并在创建新令牌之前将其设置为非活动
    • 每个用户只能有一个令牌处于活动状态
  • 因此,每次用户访问站点时,系统都会查找该令牌并检查是否存在活动字段, 如果找到了用户\u标记并且\u active=1或true,则检索用户数据(id、名称等),然后创建会话和会话变量


    我找不到任何同时使用这两种方法的问题或答案,所以这可能是过火了,或者是一个非常糟糕的想法,我刚开始阅读会话和cookie,一直在试图找到一个我可以自己实现的系统,所以很高兴知道这是好是坏。

    我不能再以评论的形式回复了,因为我的回复太长了。。。 我实现了如下内容。不幸的是,我记不清了,但这会给你一个很好的主意:

    手动登录前访问:

    • 开始一个会话
    • 成功登录时,将用户标识存储到此会话中,并将令牌值存储到数据库和cookie中
    下次浏览器访问页面时:

    • (重新)启动会话
    • 检查此会话中是否设置了用户标识。
      • 如果是,请自动登录与标识匹配的用户
      • 如果没有(会话因时间限制或浏览器关闭而过期),请检查cookie中是否存储了令牌值,以及该值是否与dB中存储的令牌值匹配。
        • 如果找到(未过期)匹配项,则自动登录用户并删除旧令牌
        • 如果用户标识无效且令牌值无效/过期:
          • 注销用户(其中包含返回“公共”模式的所有操作,如销毁会话、删除令牌、cookie等)

    您正朝着正确的方向前进,但这就像在数据库中不存在cookie令牌或cookie令牌被标记为不活动时使会话无效/注销用户一样。@d这是否正确?除非存在有效的cookie令牌,否则无法创建会话。因此,没有有效的cookie令牌意味着用户没有登录。如果没有有效的令牌,则无需使用会话,并且无需用户特定数据即可正常浏览网站。这就是你的意思吗?@dnFer啊,我明白你的意思了,如果db表中有一个活动令牌,并且创建了一个新令牌,那么登录就会失效。因此,在将令牌添加到系统之前,请检查该用户在表中是否有活动令牌,并在创建新令牌之前将其设置为非活动。我将编辑我的问题,以包含这一灵感,我将尝试一下。谢谢