3

我可以在会话注销时将用户重定向到主页。这非常简单。但是,如果用户登录了应用程序并打开了页面,即使会话超时,他也能够执行所有功能(这很糟糕)。

在页面刷新或提交到服务器之前不会发生重定向......即使用户当前未登录,用户也可以完成一些更新功能......我已经做了很多研究但是无法修复此解决方案。我也找到了这个线程,但似乎没有正确的答案:

Spring Security 3.1 - 发生会话超时时自动重定向到登录页面

例如,大多数银行网站会在超时后将您注销。他们不会等到您回来后再提交请求,然后才会将您重定向到主页。

4

2 回答 2

0

HTTP 是无状态的。为了实现某种形式的状态,服务器可以通过在每个用户的第一次请求时给他们一个会话 id 来为每个用户维护一个会话。用户必须在以后的每个请求中重新发送该会话 ID,以识别其他请求发生在同一会话中。

由于会话由服务器维护,因此无法通知客户端会话已超时。

相反,如果用户在会话超时时发出新请求,则他们的会话 ID 不再有效,因此您可以采取特定操作,例如将他们重定向到登录页面。

于 2013-10-12T12:56:49.217 回答
0

假设没有任何结果。您可能需要考虑以下提到的方法:

方法 1: 在浏览器上创建一个 cookie,encrypted timestamp其中包含来自浏览器的上次访问/请求时间戳,对于每个请求,首先获取此 cookie 值并与预定义的会话结束时间进行比较,如果会话结束时间达到则将用户重定向到错误页面,否则为请求提供服务。注销时删除 cookie。

为什么要为时间戳加密值:如果用户以某种方式了解用于会话超时的 cookie,那么(s)他可以在浏览器中更改此值并继续发送此请求。

方法 2: 您还可以通过在数据库中为每个登录用户创建一个条目并为每个请求更新此数据库中的时间戳来实现此目的。对于每个传入的请求,从数据库中获取此时间戳并将其与超时的预定义值进行比较并相应地进行处理。注销时删除条目。

In both the approaches explicitly perform response.redirect("errorPageUrl");
于 2013-10-12T13:06:16.187 回答