记住我功能如何运作?

Posted

技术标签:

【中文标题】记住我功能如何运作?【英文标题】:How remember me feature works? 【发布时间】:2015-04-23 19:58:06 【问题描述】:

“记住我”功能的定义是

当您在门户登录页面选中“记住我”复选框时, 即使您关闭了您的登录信息,您的登录信息也会被记住几天 浏览器。下次您在该时间内打开同一个浏览器时 期间,您将自动登录。

我不知道它在内部是如何工作的。

假设我点击了 app1 并使用我的凭据登录。 webserver 创建用户对象并将其存储在会话中。现在每当我打 app1 来自同一浏览器实例的选项卡(相同或不同),cookie 将被来回发送。有道理。

但是一旦我关闭浏览器并打开新窗口,然后点击 app1.将发送一组新的 cookie(不是以前的),并且网络服务器将创建 新会话并要求提供凭据。

所以,一旦关闭浏览器并打开新窗口,我真的不知道如何记住我?

【问题讨论】:

【参考方案1】:

remember-me 功能通常通过生成一个唯一的 cookie,将其与数据库中的用户相关联,并在用户访问后将持久性 cookie(即浏览器保存在磁盘上的 cookie)添加到响应中来工作。已登录。

当用户再次打开浏览器并返回应用程序时,浏览器会发送此 cookie,服务器会查找数据库中是否有任何用户拥有此 cookie。如果找到用户,他会自动进行身份验证,并为此 cookie 启动一个新会话。

【讨论】:

JB Nizet 但根据我的理解,只要从同一个浏览器实例(即从同一个浏览器窗口或从同一个浏览器窗口中的另一个选项卡)点击应用程序,就会发送 cookie。但是,一旦您从全新的浏览器窗口中点击相同的应用程序 url,cookie 就不会被共享。这不正确吗? 如果您使用 Firefox,接受持久性 cookie,关闭您的机器,然后重新启动 Firefox,查询将被发送到服务器。当然,如果你启动 Chrome 而不是 Firefox,或者在另一台机器上启动 Firefox,cookie 就不会存在。 我尝试从 firefox 访问我的 we 应用程序并注意到 jSessionId 。关闭浏览器并再次从firefox点击webapp,我可以看到新的jsessionId。看起来发送了不同的 cookie,否则 jsessionId 将是相同的。对吗? jsessionis 是一个 session cookie。它不是持久的。记住我功能使用不同的持久 cookie。 哦,知道了。这意味着永久 cookie 在注销时被删除(因为服务器必须指示浏览器这样做)而不是在浏览器退出时删除,但会话 cookie 可能会被删除或不被删除,具体取决于浏览器设置。希望现在是正确的吗?

以上是关于记住我功能如何运作?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Amplify Auth Class 添加“记住我”功能?

ExtJS:使用“记住我”功能登录

如何使用 DRF JWT 实现记住我的功能?

登录页面上的“记住我”功能是啥意思?

在 ASP.NET MVC 中实现“记住我”功能

如何安全实现“记住我”功能