我可以在会话注销时将用户重定向到主页。这非常简单。但是,如果用户已经登录到应用程序并打开了页面,即使在会话超时时,他也能够执行所有功能(这很糟糕)。
重定向不会发生,直到页面被刷新,或提交到服务器...有一些更新功能,可以由用户,即使他目前没有登录...我做了很多研究,但无法修复这个解决方案..我也找到了这个线程,但它似乎没有适当的答案:
Spring Security 3.1 - Automatically redirect to login page when session-timeout occurs
例如,大多数银行网站在超时后将您注销。它们不会等到您返回后再提交请求,然后您将被重定向到主页。
2条答案
按热度按时间ev7lccsx1#
假设一切都不顺利,你可以考虑以下方法:
**方法1:**在浏览器上创建一个cookie,并在其中包含
encrypted timestamp
,该cookie将包含浏览器上次访问/请求的时间戳,对于每个请求,首先获取该cookie值,并与预定义的会话超时时间进行比较,如果达到会话超时时间,则将用户重定向到错误页面,否则为请求提供服务。为什么要加密时间戳的值:如果用户以某种方式知道了用于会话超时的cookie,则他可以在浏览器中改变该值,并继续发送该请求。
**方法2:**您还可以通过在数据库中为每个登录的用户创建一个条目,并在此数据库中为每个请求更新时间戳来实现此目的。对于每个传入的请求,从数据库中获取此时间戳,并将其与预定义的超时值进行比较,然后进行相应处理。注销时删除该条目。
q7solyqu2#
HTTP是无状态的。为了实现某种形式的状态,服务器可以在每个用户的第一次请求时为他们提供一个会话ID,从而为他们维护一个会话。用户必须在以后的每个请求中重新发送该会话ID,以确定其他请求是否发生在同一个会话中。
由于会话由服务器维护,因此无法通知客户端会话已超时。
相反,如果用户在会话超时时发出新请求,则他们的会话ID不再有效,因此您可以采取特定的操作,如将他们重定向到登录页面。