我正在试图确定IPB论坛的运作方式。
如果我勾选记住我,即使我关闭浏览器并重新打开它,我仍会保持登录状态。
我正在努力研究这是如何可能的,因为服务器设置的唯一cookie会在会话结束时到期,即当我关闭浏览器时。那么如果不使用cookie,服务器如何无法恢复会话?
编辑:会话ID cookie设置为在会话结束时到期,我将浏览器设置为在会话结束时删除cookie。
这意味着当我关闭浏览器(会话结束)时,应该删除cookie。
在我的浏览器关闭期间,如果我在不同的浏览器中打开同一个站点,肯定会恢复会话?但是,这不会发生。
相反,如果我打开原始浏览器,会话将恢复。
唯一的其他cookie集是一个名为pass_hash的cookie,它会在创建后立即过期,并在每次加载页面时由服务器发送。因此它不会被用于身份验证。
答案 0 :(得分:3)
Cookie的偷偷摸摸的替代方案是图像或其他对象中最后修改的时间戳。服务器可以为您提供一个映像,将时间戳设置为标识会话的值。当您加载另一个页面时,浏览器会发送一个if-modified-since timestamp 并将您带走。
答案 1 :(得分:2)
使用浏览器 localStorage 对象。例如:
localStorage.setItem("lastname", "Smith");
var name = localStorage.getItem("lastname");
答案 2 :(得分: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
答案 3 :(得分:1)
关闭浏览器窗口时,不一定会销毁会话信息。例如,在PHP中,您可以选择将会话信息保存在数据库中,并且可以在浏览器关闭并且原始会话结束后保留该信息。
我能想到的另一种方法是在Users表上设置一个标志,表明用户仍然登录。也许该表有一个名为logged_in的字段,您可以将其设置为true。经过一段时间后[即,你没有回来]它会被重置为假。
答案 4 :(得分:1)
除了Cookie之外,还有一些地方可以隐藏会话信息。
网址(http://example.com/app/234348738790/main)
中的会话密钥作为GET变量的会话密钥(?sess = 257892345)
作为POST变量的会话密钥(输入类型='隐藏')
将其存储在浏览器的本地存储中
使用上述任何一项的javascript将会话信息传回服务器。
答案 5 :(得分:0)
听起来我觉得你错过了一个cookie(或者在它过期时被误读/误解),但另一种可能性是它保持远程地址存储在数据库中并自动为它创建一个新的会话访问。然而,这在安全方面和由于NAT等等都是一个相当差的解决方案 - 所以我怀疑这是IPB所做的。