这篇文章我会说的很多,很杂,但主要还是关于session过期的问题
本文针对session过期但是由于项目情况比较特殊,一般判断无法解决,所以我会阐述几种我用过的方式。
1. session过期情况---这是最简单的一种,前台是一个在无点击的情况下不会产生前后交互的界面
这种情况下最简单的方式就是首先设置session失效时间,其次设置过滤器(拦截器),拦截所有请求,
如果过了session失效时间,前台用户进行操作,可以在过滤器中直接进行重定向。
注意:
这里我要说个小问题:很多人说遇到过 Cannot forward after response has been committed 问题,
这问题是在response发送关闭后有发送一次。很多说在response.redirect 后边加return就可以解决了,
不错这是解决办法,但在filter的dofilter中一定注意一点,filter的super.doFilter 和 filterChain.doFilter
一定要和你的重定向语句不能串行化执行,用判断分开执行,只要保证重定向之后没有了response的操作
就不会出现该问题了。
2. session过期情况 --- 前台定时ajax (但使用的地方不多,一个界面也就1-2个,主要供server推送或者是显
示最热物品之类的)这种情况是最好的(我最喜欢的), 这种情况下我基本使用方式:
1. 在过滤器(拦截器)中进行处理,当用户第一次访问时候,把当前系统时间放到session中oldtime(long
值即可),之后每次有请求经过时候,判断当前的请求是不是ajax请求,如果是则把当前系统存session
中newtime,如果不是则把当前时间放到oldtime中,这样只要new-old > 一个值 ,就证明用户在多长时
间没操作,这时候我们可以手动让session失效,并让前台进行跳转。(就是记录用户第一次时间和最
后一次时间,做差)
后台:
HttpSession session = request.getSession(); long now = System.currentTimeMillis() session.setAttribute("newtime", now); if("XMLHttpRequest".equals(request.getHeader("x-Requested-With"))){ if(now - (Long)session.getAttribute("oldtime") > 30000000){ response.getWriter().write( "<script>window.location.href='login.html'</script>"); return; } } session.setAttribute("oldtime", now); chain.doFilter(request,response);
前台:
$(function(){ setInteval(function(){ $.post("getMessage", function(data){ //判断是不是过期,如果过期可以返回的js //<script>window.location.href='login.html'</script> //通过$("html").html("*****上边的串*****");进行跳转 //如果没过期,就该干嘛干嘛。 },"text"); }, 300000); });
注意:这种方式有很大局限性, 主要是前台编写不可以应用大量的ajax,否则不能判断是不是用户操作。
3. session过期情况----前台有大量ajax(就类似我现在做的项目,前台95%是利用ajax)其实我现在项目中有很
多是实时更新的,一个见面中一个模块是每过3秒更新一次,另一个是每过5分钟更新一次而且大部分的点
击事件都是ajax,因为前台需要异步形式。(其实我都快泪奔了......)这时候session本质来讲是永远不会
过期的,除非session丢了。这种情况只能在某个时间点让前台把所有定时器关掉,比如说1小时定时器全
关,在利用web.xml把session超时时间设置成10分钟,如果在十分钟内没请求,session失效,但是如何
让前台自动跳转哪?
其实还是需要一个定时器,(当然如果用长连接也可以,但是我不怎么会使),每过1小时零20分钟访问
后台一次判断session(一定要在session预定失效时间后请求)。来进行跳转。
毕竟没有请求,前台自动跳转,这实在是不符合基本的业务逻辑。
最后我说一下 HttpSessionListener这个接口有两个函数,一个是在监听session创建一个是监听session销毁的
该接口主要还是功能还是判断当前在线人数的, 监听器这种东西主要还是针对与某个动作触发后应该作什么反映。
在web中请求和响应这套业务逻辑中,listener在我看来并不应该属于这里。
亲们,如果谁有好的建议,改进措施,我的内容写错,请及时提出哈!另外有什么别的办法,请回复给我。
iteye发表工具真应该重做了,不太智能,呵呵
相关推荐
本文主要介绍了Java Web实现session过期后自动跳转到登陆页功能,涉及java过滤器针对session的判断与跳转相关操作技巧。 一、建立基本过滤器 要实现session过期后自动跳转到登陆页功能,需要建立一个基本的过滤器...
以上代码片段展示了如何通过过滤器实现Session过期后的自动跳转。这种方式更加灵活,可以直接控制HTTP响应,确保用户在Session过期后能够被正确地引导回登录页面,重新验证其身份。在实际应用中,还需要考虑其他因素...
- 自动跳转到登录页:服务器可以设置拦截器或过滤器,当检测到Session过期,直接重定向到登录页面。 - 提示信息:告知用户Session已过期,需要重新登录。 4. **Session与Cookie的关系**:Session依赖于Cookie来...
通过这种方式,EXTJS 4.1 MVC应用能够智能地处理动态加载控制器,同时优雅地处理Session过期的情况,确保用户有一个顺畅的使用体验。动态加载控制器和Session管理是构建大型、可扩展Web应用的基础,它们有助于提高...
"项目访问时间过长session过期提醒"这个话题涉及到的是如何配置Web应用程序,以便在用户的会话过期时自动跳转到特定的过期页面,提醒用户重新登录。下面我们将详细讲解实现这一功能的关键步骤和技术。 首先,我们...
3. **检测Session过期并跳转** 在页面的后台代码(C#)中,可以通过`IsNewSession`属性判断Session是否过期,如果过期则重定向到登录页面或其他指定页面: ```csharp if (Context.Session.IsNewSession) { ...
例如,可以显示一个友好的提示,告知用户由于Session过期需要重新登录,并提供一键返回按钮。同时,登录页面应设计为可直接从登录状态快速恢复到原页面,且能自动填充之前输入的表单数据。 6. 安全性考虑: 在处理...
在JavaWeb开发中,登录页面自动跳转是一个常见的功能需求,它涉及到用户认证、会话管理以及URL重定向等核心概念。以下是对这个主题的详细解释: 1. **用户认证**:用户认证是验证用户身份的过程,通常在登录页面...
综上所述,通过使用过滤器来处理session过期后的重定向,并结合JavaScript来控制iframe框架的跳出和页面的刷新,可以有效地解决JSP应用中的会话管理和页面布局问题。这不仅可以提升系统的安全性,同时也能改善用户...
所以通常设置合理的Session过期时间,如`Session.Timeout = 20;`表示20分钟无操作后Session失效。 3. **结合Cookie和Session**: - 有时,为了兼顾用户体验和安全性,开发者会选择结合Cookie和Session。登录成功后...
这样,当Ajax请求因Session超时导致服务器返回302时,前端能够捕获到这个错误并自动跳转到登录页面,而不是让页面保持在原来的视图中,提供良好的用户体验。 总结来说,结合后端的Session过滤器和前端的Ajax重写,...
2. 会话过期:默认情况下,Session会在一段时间无活动后自动销毁,需要合理设置过期时间。 3. 不能跨域共享:每个域名有自己的Session,不同域间的页面无法直接共享Session数据。 4. 安全性:Session信息存储在...
知识点四:实现Session过期提示 当Session即将过期或已过期时,需要给用户提供提示。在代码示例中,如果检测到`lefttime`等于0,就会停止定时器,并通过JavaScript弹出一个警告框提示用户。如果用户确认,则通过`...
如果用户在这段时间内没有进行任何操作,Session将会自动过期。 3. **应用程序池回收**:IIS的应用程序池默认每1740分钟(约29小时)会自动重启一次,这会导致所有用户的状态信息丢失。 4. **多台服务器部署**:在...
Session的核心概念是“会话”,它在用户打开网站并开始浏览网页时被创建,直到用户关闭浏览器或者Session过期。每个Session都与特定的用户相关联,通过SessionID来区分不同的用户。当用户在网站内跳转页面时,...
在`sessionrun.jsp`页面中,我们可以设置一个友好的提示信息,告知用户session已过期,建议他们在2秒后自动跳转回首页(或指定的登录页面)。这里使用JavaScript实现延迟跳转,同时弹出警告框通知用户。 通过以上...
- **内存管理**:大量用户会导致服务器内存中的Session数量增加,因此需要合理设置Session过期时间和使用Session缓存策略,如分布式Session存储,以减轻服务器内存压力。 - **安全性**:Session ID应具有高随机性...
这样,每当用户在网站的不同页面之间跳转时,服务器可以通过检查Session来识别用户是否已经登录,从而提供个性化的服务或者执行安全相关的操作。 首先,我们来详细了解一下什么是Session。在HTTP协议中,由于其无...
当用户在应用程序的页面之间跳转时,存储在Session对象中的变量将不会丢失,而是在整个用户会话中一直存在,直到会话过期或结束。 - **存储位置**:Session数据通常存储在服务器上,因此安全性比Cookie更高。 - *...
- Session过期:设置合理的session超时时间,避免内存泄漏。同时,Redis可以设置过期策略,自动清理过期的session。 - 负载均衡:在多服务器环境中,确保负载均衡器能够正确处理session粘滞性,使用户请求始终路由...