在会话超时之前警告用户
我有一个在Spring MVC
, JSP
实现的Web应用程序。
在web.xml
定义的默认会话超时为30分钟。
如果用户闲置25分钟,我需要向用户显示一个弹出窗口,并显示Your session is going to be end by 5 min, Please click OK to continue
。
我们可以使用JavaScript
, jquery
或任何其他方法实现这一目标吗?
请建议。
试试这个代码。 希望它能解决你的问题。 谢谢
var cookieName = 'sessionMsg'; var message = 'Your session is going to be end by 5 min, Please click OK to continue'; function getCookie(name) { var name = name + "="; var ca = document.cookie.split(';'); for(var i=0; i
你可以使用如下:我在jsp页面中使用它,如header.jsp。 这对我来说可以。 我正在使用spring,jsp和jquery。
JavaScript的:
HTML Div:
你可以发送一个cookie,其中包含每个请求的剩余时间(以毫秒为单位)。 然后您可以按建议使用setTimeout,但在执行timeout函数时再次测试该值。 如果值已更改,您可以重置超时。 由于cookie是针对整个域设置的,因此即使对于ajax或其他选项卡也始终是正确的。
var cookieName = 'sessionMsg'; var message = 'Your session is going to be end by 5 min, Please click OK to continue'; function getCookie(name) { var name = name + "="; var ca = document.cookie.split(';'); for(var i=0; i
为了通知用户前端的超时,您需要从后端传递此信息。 为此,我使用https://www.javaworld.com/article/2073234/tracking-session-expiration-in-browser.html中的信息作为基线。
在Controller中的每个Response方法中,您需要包含包含会话超时时间以及当前服务器时间的cookie。 由于听起来您已经在web.xml中设置了会话超时,因此可以使用类似于以下内容的方式将Cookie添加到您的响应中:
@RequestMapping(value="/example", method = RequestMethod.GET, produces = "application/json") @ResponseBody public ResponseEntity
然后,在前端,您需要检索这些cookie的值并将它们与客户端当前时间进行比较,以确定何时通知用户即将到来的会话超时。 根据此处的其他答案和链接中的文章,这是一个简单的代码块:
var currTimeCookieName = 'serverTime'; var expireTimeCookieName = 'sessionExpiry'; var offset; var warningTime = 5 * 60 * 1000; var timeoutWarningMessage = 'Your session is going to be end by 5 min, Please click OK to continue'; function getCookie(name) { var name = name + "="; var ca = document.cookie.split(';'); for(var i=0; i 0) { checkForTimeout(); } else { if(confirm(timeoutWarningMessage)) { //TODO do a backend call or other action to extend the session here setTimeout(function() { checkForTimeout(); }, 1 * 60 * 1000); } } }, timeUntilWarning); } checkForTimeout();
您应该使用WebSockets将数据从Web应用程序发送到客户端浏览器。
1)计算服务器端的会话超时。 2)Websocket将发送有关会话超时消息的消息。
你知道windows.setTimeout吗?
http://www.w3schools.com/jsref/met_win_settimeout.asp
这就是你需要的
例如
var resetTime_int; function resetTimer(){ if(resetTime_int) window.clearTimeout(resetTime_int) resetTime_int=window.setTimeout(function (){ if(prompt('Your session is going to be end by 5 min, Please click OK to continue')) location.reload() }, 1000*60*25) } resetTimer() document.onmousemove=resetTimer document.onkeyup=resetTimer
1000 * 60 * 25 = 25分钟。