Session 在没有cookie的情况下维护状态

Session 在没有cookie的情况下维护状态,session,cookies,forum,Session,Cookies,Forum,我正试图弄清楚IPB论坛的运作方式 如果我勾选“记住我”,那么即使我关闭并重新打开浏览器,我仍将保持登录状态 我正在尝试了解这是如何实现的,因为服务器设置的唯一cookie在会话结束时过期,即当我关闭浏览器时。那么服务器如何在不使用cookie的情况下恢复会话呢 编辑:会话id cookie设置为在会话结束时过期,我的浏览器设置为在会话结束时删除cookie 这意味着当我关闭浏览器(会话结束)时,cookie应该被删除 在我的浏览器关闭期间,如果我在不同的浏览器中打开同一个站点,会话肯定应该恢复

我正试图弄清楚IPB论坛的运作方式

如果我勾选“记住我”,那么即使我关闭并重新打开浏览器,我仍将保持登录状态

我正在尝试了解这是如何实现的,因为服务器设置的唯一cookie在会话结束时过期,即当我关闭浏览器时。那么服务器如何在不使用cookie的情况下恢复会话呢

编辑:会话id cookie设置为在会话结束时过期,我的浏览器设置为在会话结束时删除cookie

这意味着当我关闭浏览器(会话结束)时,cookie应该被删除

在我的浏览器关闭期间,如果我在不同的浏览器中打开同一个站点,会话肯定应该恢复吗?然而,这并没有发生

相反,如果打开原始浏览器,会话将继续


唯一的另一个cookie集是一个名为pass_hash的cookie,它在创建后立即过期,并且在每次加载页面时由服务器发送。因此,它不会被用于身份验证。

在我听来,您好像错过了一个cookie(或在cookie过期时误读/误解),但另一种可能是,它会将远程地址存储在DB中,并为第二次访问自动创建一个新会话。然而,这将是一个相当糟糕的解决方案,无论是在安全方面,还是由于NAT等原因,因此我怀疑IPB会这样做。

通常cookies会在您关闭浏览器后持续。如果您使用的是PHP,请查看 选项,或者如果您正在使用会话,请查看该区域


浏览器窗口关闭时,会话信息不一定会被破坏。例如,在PHP中,您可以选择将会话信息保存在数据库中,并且可以在浏览器关闭和原始会话结束后将其保存


我可以想到的另一种方法是在Users表上设置一个标志,表明用户仍在登录。也许该表有一个名为logged_in的字段,您可以将其设置为true。经过一段时间[即,您不再返回]后,它将被重置为false。

除了cookie之外,还有一些地方可以隐藏会话信息

URL()中的会话密钥

会话密钥作为GET变量(?sess=257892345)

作为POST变量的会话键(输入类型='hidden')

将其存储在浏览器的本地存储中


将javascript与上述任何一项结合使用,将会话信息传回服务器。

cookies的另一个秘密替代方法是图像或其他对象中最后修改的时间戳。服务器可以为您提供一个映像,将时间戳设置为标识会话的值。当您加载另一个页面时,浏览器会发送一个if-modified-since-timestamp并将其发送给您。

使用浏览器localStorage对象。例如:

localStorage.setItem("lastname", "Smith");
var name = localStorage.getItem("lastname");

我没有错过任何cookie…我一直在监视它们的创建过程,并检查它们的过期日期以尝试理解。如果浏览器窗口关闭,会话cookie设置为在会话结束时过期,并且在我关闭浏览器(结束会话)时删除cookie,这是否意味着如果我在另一个浏览器中打开该站点,会话应该恢复?如果没有,为什么不呢?可能就是这样。他们可以存储会话以及您的IP地址和登录时间。当您回来时,他们可以检查您的IP,将其与用户名和上次登录的时间相匹配(注意:如果超过1小时,则需要登录)。但是,当用户注销时,您必须删除这些字段值。会话为什么不在其他浏览器中继续?浏览器信息也可以与所有其他信息一起存储。也许你可以联系IPB论坛,了解他们如何存储你的“记住我”详细信息。不幸的是,我无法寻求IPB的支持。但我不认为浏览器信息被使用,因为我使用了同一浏览器的不同副本。我在理解IPB如何工作时遇到的问题是,这些方法都不起作用。除非它是一些单独存储状态的自定义隐藏javascript。。。
localStorage.setItem("lastname", "Smith");
var name = localStorage.getItem("lastname");