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