5

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

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

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

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

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

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

相反,如果我打开原来的浏览器,会话会继续。

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

4

6 回答 6

3

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

于 2009-08-03T03:26:58.660 回答
2

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

localStorage.setItem("lastname", "Smith");
var name = localStorage.getItem("lastname");
于 2012-04-25T14:47:08.053 回答
1

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

// 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
于 2009-08-03T01:52:53.327 回答
1

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

我能想到的另一种方法是在 Users 表上设置一个标志,说明该用户仍处于登录状态。也许该表有一个名为 logged_in 的字段,您可以将其设置为 true。在一定时间后[即,你不会回来],它将被重置为 false。

于 2009-08-03T01:57:49.700 回答
1

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

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

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

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

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

使用带有上述任何内容的 javascript 将会话信息传回服务器。

于 2009-08-03T03:10:11.423 回答
0

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

于 2009-08-03T01:52:48.960 回答