gpt4 book ai didi

spring - 如何绕过重置 session 的到期时间

转载 作者:行者123 更新时间:2023-12-01 05:25:08 29 4
gpt4 key购买 nike

我有一个网页,在登录后,您基本上坐在一个页面上并执行一些导致 AJAX 请求的事情。

由于 AJAX 请求与普通 HTTP 请求没有什么不同,因此它们会根据需要在到达服务器时延长 session 的到期时间。

我对此没有问题,因为用户的 session 只有在与服务器交互时才应扩展,这是有道理的。

由于用户基本上停留在这一页面上,我希望能够在他们的 session 过期时通知他们,而不是他们在超时发生后尝试使用任何操作访问服务器时发现困难的方法。

所以我被要求实现一些我经常在银行网站上看到的东西,在用户 session 到期之前,弹出窗口( alert )出现。我不需要它在之前立即出现,但是“只要”它到期(或尽可能接近,在它发生之后),因此用户无法在页面上执行任何操作并意外地被重定向到登录页面。

我最初的想法是轮询服务器并每 30 秒左右检查一次。这样做的问题是 AJAX 请求会重置 session 的到期时间(即 30 分钟),从而使使用此轮询的点无效。

当然,一个“解决方案”是在 Javascript 中处理这个问题——当接收到正常操作的 AJAX 请求时,重置计时器。此计时器将在设置后 30 分钟运行。而且我知道这不会太难,因为我可以将它附加到 jQuery 的全局 AJAX 处理程序,以便它在每次成功的 AJAX 调用后重置计时器,但对我来说跟踪 session 时间似乎不正确两个地方出。我宁愿“浪费”资源并经常进行 AJAX 调用。我只是不希望用户不得不做一些事情来找出他们的 session 何时到期 - 如果他们离开计算机 31 分钟,我希望在他们回来时有一条消息说他们的 session 已过期,他们会被重定向。

从我浏览过的许多文章/解释中,我真的找不到任何适用于我的情况的内容。我见过使用 Spring Security 的东西,但不幸的是我们没有使用它,因为我们不使用普通的用户名/密码方案,并且无法弄清楚如何自定义它才能工作。

我已经看到了“过滤器”或“拦截”这两个术语,但我不确定我是否可以使用它们,因为这似乎是一个安全问题。

所以基本上,我正在寻找某种方法来在 session 过期时进行 HTTP 请求检查,而无需重置其过期时间。我基本上只需要基于此(我可以弄清楚)以某种形式的真/假做出回应。

我真的很想在服务器上保留这种处理,并允许轮询在 session 超时时捕获,因此 HTTP 请求需要能够查看 session 的当前状态并进行分析,但不能重置超时。

如果有帮助,我的 session 声明如下:

@Component
@Scope(value = "session", proxyMode = ScopedProxyMode.TARGET_CLASS)
public class UserDataSession {

我的 Controller 像这样使用它:
@Autowired
private UserDataSession userDataSession;

有没有办法绕过请求映射中 session 到期的重置?

最佳答案

您可以发出一个不发送任何 cookie 或 jsession id 的 ajax 请求,因此服务器认为它是一个新 session ,并且不会扩展真正的 session 。
您还需要以另一种方式将 jsession id 传递给服务器,以便服务器可以查找 session 以查看它是否需要过期。

以下是阻止 cookie 的一些想法:
Prevent Cookies From Being Sent on AJAX Request

关于spring - 如何绕过重置 session 的到期时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14349439/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com