http - 何时使 session 无效

标签 http session cookies session-cookies

这是关于网络 session 管理的一般性问题。 管理 session 超时的最佳实践方法是什么?

假设一个用户登录的系统,在服务器上创建一个 session ,并将 token 标识符发送回客户端(通过 httpOnly cookie)。

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

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

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

最佳答案

如何管理 session 超时以保持用户登录状态,防止他/她意外退出?

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

一般情况下,服务器端会有一个“session timeout”的设置,比如Struts2中的session-timeout,如果客户端在一段时间后没有发出任何请求,就会终止 session 。

p>

即使用户关闭浏览器,如何使 session “生效”?即如何实现“记住我1周”功能?

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

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

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

关于http - 何时使 session 无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42676948/

相关文章:

javascript - ExpressJS 到本地服务器没有 'Access-Control-Allow-Origin' header

Python urllib2 进度 Hook

php - 关闭浏览器后保留 PHP session

cookies - 确定哪个脚本设置了 cookie

sockets - 转到套接字 : too many open files

java - 尝试获取 InputStream 时出现错误 502/504

PHP/AJAX 并发 session 仅在 Chrome 中行为不端

php - Laravel Blade 中不显示 session 值

python - 如何在 Google App Engine Python 应用程序的模块之间共享 session ?

javascript - 存储 Cookie Windows 应用商店应用程序