Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Http 何时使会话无效_Http_Session_Cookies_Session Cookies - Fatal编程技术网

Http 何时使会话无效

Http 何时使会话无效,http,session,cookies,session-cookies,Http,Session,Cookies,Session Cookies,这是一个关于web会话管理的一般性问题。 管理会话超时的最佳实践方法是什么 假设系统中有用户登录,在服务器上创建会话,并将令牌标识符发送回客户端(通过httpOnlycookie) 如果用户尝试在验证会话的地方进行基于访问的检查,那么在数据库中更新会话的到期时间可能是有意义的。这是否也意味着发生这种情况时,我们应该更新会话令牌cookie上的到期时间以匹配 对我来说,这似乎是最明显的解决方案,但不断地重写cookie似乎需要很大的开销 非常感谢对最佳实践方法的任何见解。谢谢 如何管理会话超时以保

这是一个关于web会话管理的一般性问题。 管理会话超时的最佳实践方法是什么

假设系统中有用户登录,在服务器上创建会话,并将令牌标识符发送回客户端(通过
httpOnly
cookie)

如果用户尝试在验证会话的地方进行基于访问的检查,那么在数据库中更新会话的到期时间可能是有意义的。这是否也意味着发生这种情况时,我们应该更新会话令牌cookie上的到期时间以匹配

对我来说,这似乎是最明显的解决方案,但不断地重写cookie似乎需要很大的开销


非常感谢对最佳实践方法的任何见解。谢谢

如何管理会话超时以保持用户登录,防止用户意外注销?

为了让用户保持登录状态,无需不断重写cookie。您所需要做的就是使会话令牌cookie的过期时间为
会话
,然后只要浏览器处于打开状态(客户端继续使用您的站点),会话令牌cookie就有效。服务器不需要知道会话过期时间(因为不再有预定义的会话过期时间),更不用说将其存储在数据库中了。用户关闭浏览器后,会话令牌cookie被清除,会话被终止(失效)

通常,服务器中会有一个“会话超时”设置,例如Struts2中的
会话超时
,如果客户端在一段时间后没有发出任何请求,则会终止会话

即使用户关闭浏览器,如何使会话“生效”?也就是说,如何实现“记住我一周”功能?

要实现此功能,将使用新的令牌cookie(例如,
RememberMeToken
)。当用户成功登录时(可能在UI上启用“记住我”复选框),服务器将生成一个唯一的随机令牌并将其存储在DB中(以及出于安全原因的过期时间),使其属于用户帐户。此
RememberMeToken
cookie的过期时间相当长(例如1周),将与登录响应一起发送回浏览器

当用户关闭浏览器并稍后重新访问站点时(或用户长时间处于非活动状态且会话在服务器端被终止),服务器会检查会话令牌cookie并发现其丢失/无效。此时,
RememberMeToken
将被检查并与数据库中存储的令牌进行比较,如果有匹配,服务器将对相应的用户进行自动登录操作,并将生成的会话令牌cookie返回给浏览器。这一切都发生在后端,客户端用户不会有任何感觉


用户在UI上启用“记住我”复选框并登录1周后,
RememberMeToken
cookie过期,如果用户打开浏览器并访问站点,则需要再次登录。

如果您没有在服务器上存储会话令牌id(第一个示例),您如何检查它的有效性,而不仅仅是某人制作的一个?会话令牌id本身存储在服务器上(内存或数据库中),但不会存储会话令牌id的过期时间。这不是永久有效的会话标识符吗?如果-不知何故-令牌id被某个第三方检索到,他们不能随时使用该id吗?即使在令牌cookie失效之后?好问题!您可以在服务器中配置一些“会话超时”值,例如Struts2中的
会话超时设置,如果客户端在一段时间后没有发出任何请求,则会终止会话。但这个“超时值”不同于“过期时间”——服务器不需要知道令牌何时(在哪个时间戳上)过期。
RememberMeToken
的过期时间是预定义的,出于安全原因,应该存储在数据库中。