`
店小二儿
  • 浏览: 3765 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类

Session过期自动跳转

    博客分类:
  • ajax
阅读更多

 这篇文章我会说的很多,很杂,但主要还是关于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 Web实现session过期后自动跳转到登陆页功能,涉及java过滤器针对session的判断与跳转相关操作技巧。 一、建立基本过滤器 要实现session过期后自动跳转到登陆页功能,需要建立一个基本的过滤器...

    Session过期后自动跳转到登录页面的实例代码

    以上代码片段展示了如何通过过滤器实现Session过期后的自动跳转。这种方式更加灵活,可以直接控制HTTP响应,确保用户在Session过期后能够被正确地引导回登录页面,重新验证其身份。在实际应用中,还需要考虑其他因素...

    session过期处理

    - 自动跳转到登录页:服务器可以设置拦截器或过滤器,当检测到Session过期,直接重定向到登录页面。 - 提示信息:告知用户Session已过期,需要重新登录。 4. **Session与Cookie的关系**:Session依赖于Cookie来...

    Extjs 4.1 (MVC) 如何动态加载控制层以及session 过期该如何处理

    通过这种方式,EXTJS 4.1 MVC应用能够智能地处理动态加载控制器,同时优雅地处理Session过期的情况,确保用户有一个顺畅的使用体验。动态加载控制器和Session管理是构建大型、可扩展Web应用的基础,它们有助于提高...

    项目访问时间过长session过期提醒

    "项目访问时间过长session过期提醒"这个话题涉及到的是如何配置Web应用程序,以便在用户的会话过期时自动跳转到特定的过期页面,提醒用户重新登录。下面我们将详细讲解实现这一功能的关键步骤和技术。 首先,我们...

    ASP.NET(基于VS2008 C#)页面计时自动跳转(session和Javascript两种方法)

    3. **检测Session过期并跳转** 在页面的后台代码(C#)中,可以通过`IsNewSession`属性判断Session是否过期,如果过期则重定向到登录页面或其他指定页面: ```csharp if (Context.Session.IsNewSession) { ...

    session失效重新登录后,返回之前页面,并保留表单数据

    例如,可以显示一个友好的提示,告知用户由于Session过期需要重新登录,并提供一键返回按钮。同时,登录页面应设计为可直接从登录状态快速恢复到原页面,且能自动填充之前输入的表单数据。 6. 安全性考虑: 在处理...

    Javaweb 登录页面自动跳转

    在JavaWeb开发中,登录页面自动跳转是一个常见的功能需求,它涉及到用户认证、会话管理以及URL重定向等核心概念。以下是对这个主题的详细解释: 1. **用户认证**:用户认证是验证用户身份的过程,通常在登录页面...

    Jsp中解决session过期跳转到登陆页面并跳出iframe框架的方法

    综上所述,通过使用过滤器来处理session过期后的重定向,并结合JavaScript来控制iframe框架的跳出和页面的刷新,可以有效地解决JSP应用中的会话管理和页面布局问题。这不仅可以提升系统的安全性,同时也能改善用户...

    c#实现cookie和session的登陆实例

    所以通常设置合理的Session过期时间,如`Session.Timeout = 20;`表示20分钟无操作后Session失效。 3. **结合Cookie和Session**: - 有时,为了兼顾用户体验和安全性,开发者会选择结合Cookie和Session。登录成功后...

    重写 ajax 实现 session 超时跳转到登录页面实例代码

    这样,当Ajax请求因Session超时导致服务器返回302时,前端能够捕获到这个错误并自动跳转到登录页面,而不是让页面保持在原来的视图中,提供良好的用户体验。 总结来说,结合后端的Session过滤器和前端的Ajax重写,...

    session session session szsessdifn

    2. 会话过期:默认情况下,Session会在一段时间无活动后自动销毁,需要合理设置过期时间。 3. 不能跨域共享:每个域名有自己的Session,不同域间的页面无法直接共享Session数据。 4. 安全性:Session信息存储在...

    判断Session的过期时间 采用JavaScript实时显示剩余多少秒

    知识点四:实现Session过期提示 当Session即将过期或已过期时,需要给用户提供提示。在代码示例中,如果检测到`lefttime`等于0,就会停止定时器,并通过JavaScript弹出一个警告框提示用户。如果用户确认,则通过`...

    session丢失解决方法

    如果用户在这段时间内没有进行任何操作,Session将会自动过期。 3. **应用程序池回收**:IIS的应用程序池默认每1740分钟(约29小时)会自动重启一次,这会导致所有用户的状态信息丢失。 4. **多台服务器部署**:在...

    session定义和作用

    Session的核心概念是“会话”,它在用户打开网站并开始浏览网页时被创建,直到用户关闭浏览器或者Session过期。每个Session都与特定的用户相关联,通过SessionID来区分不同的用户。当用户在网站内跳转页面时,...

    详解springmvc控制登录用户session失效后跳转登录页面

    在`sessionrun.jsp`页面中,我们可以设置一个友好的提示信息,告知用户session已过期,建议他们在2秒后自动跳转回首页(或指定的登录页面)。这里使用JavaScript实现延迟跳转,同时弹出警告框通知用户。 通过以上...

    session介绍

    - **内存管理**:大量用户会导致服务器内存中的Session数量增加,因此需要合理设置Session过期时间和使用Session缓存策略,如分布式Session存储,以减轻服务器内存压力。 - **安全性**:Session ID应具有高随机性...

    session_test.zip

    这样,每当用户在网站的不同页面之间跳转时,服务器可以通过检查Session来识别用户是否已经登录,从而提供个性化的服务或者执行安全相关的操作。 首先,我们来详细了解一下什么是Session。在HTTP协议中,由于其无...

    session与cookie的区别和联系?

    当用户在应用程序的页面之间跳转时,存储在Session对象中的变量将不会丢失,而是在整个用户会话中一直存在,直到会话过期或结束。 - **存储位置**:Session数据通常存储在服务器上,因此安全性比Cookie更高。 - *...

    shiro+redis session共享实现

    - Session过期:设置合理的session超时时间,避免内存泄漏。同时,Redis可以设置过期策略,自动清理过期的session。 - 负载均衡:在多服务器环境中,确保负载均衡器能够正确处理session粘滞性,使用户请求始终路由...

Global site tag (gtag.js) - Google Analytics