保持状态没有cookie

问题描述 投票:5回答:6

我试图了解IPB论坛的运作方式。

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

我正在努力研究这是如何可能的,因为服务器设置的唯一cookie在会话结束时到期,即当我关闭浏览器时。那么如果不使用cookie,服务器如何无法恢复会话?

编辑:会话ID cookie设置为在会话结束时到期,我将浏览器设置为在会话结束时删除cookie。

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

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

相反,如果我打开原始浏览器,会话将恢复。

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

session cookies forum
6个回答
3
投票

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


2
投票

使用浏览器localStorage对象。例:

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

1
投票

通常情况下,cookie会在您关闭浏览器后持续。如果您使用的是PHP,请查看set_cookie's选项,或者如果您正在使用会话,请查看session区域。

// Set Cookie
setcookie($name, $value, $expire) 
// $expire is the time in seconds since Unix Epoch (see [time()][3]) it will stay alive
// Session
session_set_cookie_params($lifetime) 
// $lifetime is the seconds it will stay alive in seconds

1
投票

关闭浏览器窗口时,不一定要销毁会话信息。例如,在PHP中,您可以选择将会话信息保存在数据库中,并且可以在浏览器关闭并且原始会话结束后保留​​该信息。

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


1
投票

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

URL中的会话密钥(http://example.com/app/234348738790/main

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

会话密钥作为POST变量(输入类型='隐藏')

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

使用上述任何一个的javascript将会话信息传回服务器。


0
投票

这听起来就像你错过了一个cookie(或者它过期时误读/误解),但另一种可能性是它保持远程地址存储在数据库中并为第二次访问自动创建一个新的会话。然而,这在安全方面和由NAT等等都是一个相当差的解决方案 - 所以我怀疑这是IPB的作用。

© www.soinside.com 2019 - 2024. All rights reserved.