Ian*_*Ian 5 spring session-variables spring-mvc
我有一个网页,登录后,您基本上坐在一个页面上并执行一些导致 AJAX 请求的事情。
由于 AJAX 请求与普通 HTTP 请求没有什么不同,因此它们会根据需要在到达服务器时延长会话的到期时间。
我对此没有任何问题,因为用户的会话只有在与服务器交互时才应该被扩展,这是有道理的。
由于用户基本上停留在这个页面上,我希望能够在他们的会话过期时通知他们,而不是他们在超时发生后尝试使用任何操作访问服务器时发现困难的方法。
所以我被要求实现一些我经常在银行网站上看到的东西,在alert用户会话到期之前,弹出窗口 ( ) 出现。我不需要它在之前立即出现,但是“只要”它到期(或尽可能接近,在它发生之后),因此用户无法在页面上执行任何操作并意外地被重定向到登录页面。
我最初的想法是轮询服务器并每 30 秒左右检查一次。这样做的问题是 AJAX 请求会重置会话的到期时间(即 30 分钟),从而使使用此轮询的点无效。
当然,一个“解决方案”是在 Javascript 中处理这个问题——当收到正常动作的 AJAX 请求时,重置计时器。此计时器将在设置后 30 分钟运行。而且我知道这不会太难,因为我可以将它附加到 jQuery 的全局 AJAX 处理程序,以便它在每次成功的 AJAX 调用后重置计时器,但对我来说跟踪会话时间似乎不正确两个地方出。我宁愿“浪费”资源并经常进行 AJAX 调用。我只是不希望用户必须做一些事情来找出他们的会话何时到期 - 如果他们离开计算机 31 分钟,我希望在他们回来时有一条消息说他们的会话已过期,他们会被重定向。
从我浏览过的许多文章/解释中,我真的找不到任何适用于我的情况的内容。我见过使用 Spring Security 的东西,但不幸的是我们没有使用它,因为我们不使用普通的用户名/密码方案,并且无法弄清楚如何自定义它才能工作。
我已经看到了“过滤器”或“拦截”这些术语,但我不确定我是否可以使用它们,因为这似乎是一个安全问题。
所以基本上,我正在寻找某种方法来在会话过期时进行 HTTP 请求检查,而无需重置其过期时间。我基本上只需要基于此(我可以弄清楚)以某种形式的真/假做出回应。
我真的很想在服务器上保留这种处理,并允许轮询在会话超时时捕获,因此 HTTP 请求需要能够查看会话的当前状态并进行分析,但不能重置超时。
如果有帮助,我的会话声明如下:
@Component
@Scope(value = "session", proxyMode = ScopedProxyMode.TARGET_CLASS)
public class UserDataSession {
Run Code Online (Sandbox Code Playgroud)
我的控制器像这样使用它:
@Autowired
private UserDataSession userDataSession;
Run Code Online (Sandbox Code Playgroud)
有没有办法绕过请求映射中会话到期的重置?
您可以发出一个不发送任何cookie或jsession id的ajax请求,因此服务器认为它是一个新会话,并且不会扩展真正的会话。您还需要以另一种方式将 jsession id 传递给服务器,以便服务器可以查找会话以查看它是否需要过期。
以下是阻止 cookie 的一些想法: 防止 Cookie 在 AJAX 请求上发送
| 归档时间: |
|
| 查看次数: |
2122 次 |
| 最近记录: |