如何在会话到期时发送警报

时间:2013-05-20 08:25:55

标签: java jsp session servlets

我希望在会话到期时发出警报,当您按下警告框中的“确定”按钮时,它会将您带到登录页面。为此,我想创建一个计时器和timertask,在后面的类的run方法中,我将检查会话是否存在。所以为此我试图在jsp页面中创建一个类,但它显示错误。我可以在servlet中创建,但我的所有页面都在jsp中,所以这个想法没用。现在我创建了一个sessionlistner,在会话中销毁方法我想链接到登录页面,但我也有问题。我不能使用sessiondestroyed方法中的响应方法。请告诉我还有其他方法

4 个答案:

答案 0 :(得分:0)

您可以使用以下JavaScript:

        var sessionTimeout = "<%= Session.Timeout %>";
        function DisplaySessionTimeout()
        {
            //assigning minutes left to session timeout to Label
            document.getElementById("<%= lblSessionTime.ClientID %>").innerText = 
                                                                        sessionTimeout;
            sessionTimeout = sessionTimeout - 1;

            //if session is not less than 0
            if (sessionTimeout >= 0)
                //call the function again after 1 minute delay
                window.setTimeout("DisplaySessionTimeout()", 60000);
            else
            {
                //show message box
                alert("Your current Session is over.");
            }
        }

有关详细信息,请访问here

答案 1 :(得分:0)

首先,您可以创建完全客户端解决方案:第一次加载页面时使用setTimout()。使用硬编码或从服务器超时值到达。触发计时器时,使用document.location = login.html(或类似的东西)到达登录页面。

这个解决方案“快而又脏”。

更好的解决方案应该基于实际会话到期。您可以创建不时尝试特殊URL的AJAX调用。此网址应返回true/false,表示会话已过期。会话过期后,您应该将页面重定向到登录屏幕。此解决方案的问题在于您请求会话状态刷新它的事实。要解决此问题,您可以对不同的服务器执行请求,或者(可能)从轮询请求中删除会话cookie,因此它将在与主会话不同的会话中执行。

答案 2 :(得分:0)

Java EE规范已经解决了这个问题。您应该考虑使用web.xml配置来处理会话超时问题。它具有用于处理所有这些的特定标签。一些标签是:

<login-config> ... </login-config>

上述标记允许您使用基于FORM的身份验证,您可以在其中指定登录HTML资源。

<security-constraint> ... </security-constraint>

上述标记可让您指定要保护的网址。最后是会话超时标记本身,它允许您以毫秒为单位指定会话超时。

完成上述操作后,容器会在请求安全网址时自动将用户带到登录页面。

以下是web.xml参考。

从消息传递的角度来看,有多种方法可以解决问题:

  • 系统将用户带回登录页面并强制他登录的事实对他/她来说足够了。

  • 您可以在登录页面上提供一般信息。

  • 设置一些棘手的标记或查询字符串逻辑,以在登录页面上显示消息。

  • 在StackOverflow本身中遇到this link,它提供了一个可以在登录页面中实现的策略。虽然没试过这个。

与整个会话超时策略本身相比,这在我看来是一个微不足道的问题。

答案 3 :(得分:0)

使用Tomcat,您可以创建一个JS计时器,进行简单的AJAX调用。 如果呼叫返回没有错误,则会话有效,如果呼叫失败,您可以认为会话已过期。在默认行为中,如果您没有明确调用它,Tomcat将无法续订会话。 我有相反的案例:link