Php 结合使用cookie和会话来保持用户登录是一个好主意吗
我正在考虑是否有可能设置一个选项来保持用户登录。现在我了解到,只有在浏览器关闭且会话丢失之前,会话才能允许用户在每个页面上导航,而无需重新输入登录信息。cookie将存储在客户端,并有一个持续时间,直到过期或用户删除cookie为止 我在想我可以把两者结合起来Php 结合使用cookie和会话来保持用户登录是一个好主意吗,php,session,cookies,session-cookies,Php,Session,Cookies,Session Cookies,我正在考虑是否有可能设置一个选项来保持用户登录。现在我了解到,只有在浏览器关闭且会话丢失之前,会话才能允许用户在每个页面上导航,而无需重新输入登录信息。cookie将存储在客户端,并有一个持续时间,直到过期或用户删除cookie为止 我在想我可以把两者结合起来 创建一个db表(id、用户id、cookie标记、处于活动状态) 用户登录,在db表中创建一行,将用户连接到存储在客户端浏览器(系统)上的cookie_令牌 每次创建令牌时,检查为其创建令牌的用户是否在系统中已有任何活动令牌,并在创建新
- 每次创建令牌时,检查为其创建令牌的用户是否在系统中已有任何活动令牌,并在创建新令牌之前将其设置为非活动
- 每个用户只能有一个令牌处于活动状态
我找不到任何同时使用这两种方法的问题或答案,所以这可能是过火了,或者是一个非常糟糕的想法,我刚开始阅读会话和cookie,一直在试图找到一个我可以自己实现的系统,所以很高兴知道这是好是坏。我不能再以评论的形式回复了,因为我的回复太长了。。。 我实现了如下内容。不幸的是,我记不清了,但这会给你一个很好的主意: 手动登录前访问:
- 开始一个会话
- 成功登录时,将用户标识存储到此会话中,并将令牌值存储到数据库和cookie中
- (重新)启动会话
- 检查此会话中是否设置了用户标识。
- 如果是,请自动登录与标识匹配的用户
- 如果没有(会话因时间限制或浏览器关闭而过期),请检查cookie中是否存储了令牌值,以及该值是否与dB中存储的令牌值匹配。
- 如果找到(未过期)匹配项,则自动登录用户并删除旧令牌
- 如果用户标识无效且令牌值无效/过期:
- 注销用户(其中包含返回“公共”模式的所有操作,如销毁会话、删除令牌、cookie等)