【问题标题】:How do I renew a spring session?如何续订春季课程?
【发布时间】:2014-07-07 16:34:48
【问题描述】:

我有一个在 Websphere 上运行 Spring MVC 的 Web 应用程序,我正在尝试实现会话到期确认。如果他们选择注销,我现在将重定向到哪里,但如果选择这样做,我不知道如何续订会话。

到目前为止,我知道我正在使用 jQuery 和 ajax 向服务器发送请求,但不知道在哪里(url),也不知道参数或预期的响应。有谁知道我如何找到这个大致的想法?它是 Spring session 的标准功能还是我必须编写一个自定义功能来解决这个问题?

【问题讨论】:

  • 好吧,也许可以简化一下,我想在弹出过期警告时使用 jQuery 或 JavaScript 重新验证用户会话。我们正在使用 Spring MVC 框架开发 Websphere 8.5 服务器。我正在寻找如何告诉服务器重新验证会话。
  • 经过更多阅读后,我现在有点明白,只需进行 ajax 调用就会重新验证会话。但我担心我可能会用幕后的 ajax 调用搞砸当前的视图,谁能举一个真正什么都不做的 ajax 调用的例子?
  • 另一个想法是我应该只刷新页面吗?这会重置超时吗?输入可能会丢失,但如果用户在我们的网站上近 20 分钟处于非活动状态,那么我怀疑他们是否会首先提交他们的操作。那么页面刷新会起作用吗?

标签: java jquery ajax spring session


【解决方案1】:

为什么不为max_inactive_interval 设置一个更大的数字,这样会话会持续更长时间?

如果用户处于活动状态,Spring Session 会自动更新。看一下 Spring Session 创建的用于存储会话数据的表:有一个列 max_inactive_interval 这基本上意味着只有在用户在该时间间隔内不活动时会话才会过期。

【讨论】:

    【解决方案2】:

    我能够通过结合来自多个来源的信息来解决这个问题。我想出了以下代码:

        function timeoutMessage(){
            var popupdate = new Date();
            var renewSession = confirm('Your Session is about to expire!\n\nYou will be logged out in 2 minute.\nDo you want to stay signed in?');
            if(renewSession){
                var response = new Date();
                if(response - popupdate > 120000){
                    alert("Response took too long, current session has ended. \nRedirecting to login.");
                }else{
                    pingServer();
                    resetTimeout();
                }
            }else{
                 window.location.href = "{app logout url}";
            }
        }
    
        function pingServer(){
            jQuery.ajax({url: "{valid server page url}",type: "HEAD",complete: function (XMLHttpRequest, textStatus) {}});
        }
    
         function resetTimeout(){
             window.setTimeout(function(){timeoutMessage();},1080000);
         }
    
        $(document).ready(function()
            resetTimeout(); 
        });
    

    该函数设置一个与会话超时前两分钟一致的计时器。大多数站点将提供上述大部分代码,但 pingServer() 函数中的代码;为了扩展服务器上的会话,您可以向服务器发送一个简单的“HEAD”类型的 ajax 调用,而不会中断应用程序的主要流程。它被视为服务器对会话的操作,因此重置/更新会话的超时。如代码中所示,您不需要对服务器响应做任何事情;只要您发送请求,会话超时就会被重置/更新。

    我希望这会有所帮助。我花了一段时间才完全拼凑起来。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-24
      • 2015-02-24
      • 2020-12-18
      • 1970-01-01
      • 2017-10-06
      相关资源
      最近更新 更多