session失效_session失效问题 - CSDN
精华内容
参与话题
  • 关于session失效时间和过期

    万次阅读 2019-03-07 11:16:11
    Session基本是在我们做项目的时候,使用频率非常高的。 1、session类似于map是键值对的形式存在的。通过session.getAttribute("name");获取对应的name参数信息。 2、2.session的过期时间是从session不...

    Session基本是在我们做项目的时候,使用频率非常高的。

    1、session类似于map是键值对的形式存在的。通过session.getAttribute("name");获取对应的name参数信息。

    2、2.session的过期时间是从session不活动的时候开始计算,如果session一直活动,session就总不会过期,从该Session未被访问,开始计时; 一旦Session被访问,计时清0;

    3、设置session的失效时间。

      Session的默认失效时间是30分钟,

    a) web.xml中

    b) <session-config> <session-timeout>30</session-timeout> </session-config>

    c) b)在程序中手动设置

    d) session.setMaxInactiveInterval(30 * 60);//设置单位为秒,设置为-1永不过期

    e) tomcat也可以修改session过期时间,在server.xml中定义context时采用如下定义

    f) <Context path="/livsorder" docBase="/home/httpd/html/livsorder"

    g) defaultSessionTimeOut="3600" isWARExpanded="true" isWARValidated="false"

    h) isInvokerEnabled="true" isWorkDirPersistent="false"/>

    4、判断session过期;

     1)、可以在创建session的时候做一个flag标记,对标记进行判断来获取session是否过期;

    2)、根据 if(session.getAttribute('user')==null)判断是否为空;

    3)request.getSeesion(boolean)方法,一下子让我恍然大悟。这个方法里面传了一个boolean值,这个值如果是true,那么如果当前的request的session不可用,那么就创建新的会话,如果存在就返回当前的会话。如果参数是false,那么在request的当前会话不存在的时候就返回null。

    判断session的方法还有很多不一一赘述,根据实际情况和使用方便自行使用不用的方法。

                                                                                                                                                                                                                                                             Csdn name:robin-fan

    展开全文
  • session失效强制重新登录

    千次阅读 2018-01-03 22:07:53
    session失效强制重新登录实现原理: SpringMVC 中的Interceptor 拦截器也是相当重要和相当有用的,它的主要作用是拦截用户的请求并进行相应的处理。比如通过它来进行权限验证,或者是来判断用户是否登陆,或者是像...

    session失效强制重新登录

    实现原理:
    SpringMVC 中的Interceptor 拦截器也是相当重要和相当有用的,它的主要作用是拦截用户的请求并进行相应的处理。比如通过它来进行权限验证,或者是来判断用户是否登陆,或者是像12306 那样子判断当前时间是否是购票时间。

    实现步骤:
    1. 创建一个拦截类SystemSessionInterceptor,实现HandlerInterceptor

    package com.dacheng.interceptor;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.http.HttpSession;
    
    import org.apache.log4j.Logger;
    import org.springframework.web.servlet.HandlerInterceptor;
    import org.springframework.web.servlet.ModelAndView;
    
    import com.dacheng.util.ConstantParameter;
    
    public class SystemSessionInterceptor implements HandlerInterceptor {
        //登录失效的提示,此处是用一个映射实现的,对应的jsp文件时sessionrun.jsp
        public static final String Prompt_LOGIN_URL="/sessionrun"; 
    
        Logger log = Logger.getLogger(getClass());
    
        @Override
        public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
                ModelAndView modelAndView) throws Exception {
        }
    
        @Override
        public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
                throws Exception {
    
        }
    
        @Override
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
                throws Exception {
            HttpSession session = request.getSession(true);
            // session中获取用户名信息
            Object obj = session.getAttribute(ConstantParameter.session_userId);
            log.info("userId = " + obj);
            log.info("RequestURI = "+request.getRequestURI());
            if (obj == null || "".equals(obj.toString())) {
    
                 //如果判断是 AJAX 请求,直接设置为session超时
                if( request.getHeader("x-requested-with") != null 
                        && request.getHeader("x-requested-with").equals("XMLHttpRequest")  ) {
    
                     response.setHeader("sessionstatus", "timeout");  
                     response.sendError(518, "session timeout.");  
    
                } else{
                    response.sendRedirect(
                            request.getSession().getServletContext().getContextPath() 
                            + ConstantParameter.Prompt_LOGIN_URL);
                }    
    
                return false;
            }
            return true;
        }
    
    }
    

    sessionrun.jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <script src="js/jquery.min.js" type="text/javascript"></script>
    <title>登录提示</title>
    </head>
    <body>
    <script language="JavaScript"> 
        alert("登录已失效,请重新登录。"); 
        setTimeout(function () { 
          window.top.location.href="./loginTZBSM"; 
        },2000); 
      </script>
    </body>
    </html>

    2.在SpringMVC中加入如下配置
    需要注意的是:此处的拦截地址,因为我的jsp文件是在web-info下的,所以没能实现双映射地址的写法,例如 @RequestMapping(“/a/b”) ,也没能实现在controller类上加@RequestMapping 映射的方法,所以就在url映射上拼接了“interceptor”前缀,当做标识。(此处可忽略,如果遇到跟我相同问题的人可以借鉴)

    <!-- Session失效拦截 -->
       <mvc:interceptors> 
        <!-- 定义拦截器 -->
         <mvc:interceptor>   
          <!--   匹配的是url路径, 如果不配置或/**,将拦截所有的Controller  -->
            <mvc:mapping path="/interceptor*" />  
            <!-- 不需要拦截的地址 -->
            <mvc:exclude-mapping path="/loginTZBSM" /> 
            <!-- 系统实现类 -->
            <bean class="com.dacheng.interceptor.SystemSessionInterceptor"></bean>   
        </mvc:interceptor> 
      </mvc:interceptors> 

    3.对于返回一个页面的请求,如果检测到session失效可以直接以重定向的方式实现,如下:

    response.sendRedirect(                      request.getSession().getServletContext().getContextPath() 
                            + ConstantParameter.Prompt_LOGIN_URL);

    但是对于ajax请求,此方法是不能实现重新登录的,要用一下方法:
    (1)在后台java文件中判断是否是ajax请求

     //如果判断是 AJAX 请求,直接设置为session超时
        if( request.getHeader("x-requested-with") != null 
                && request.getHeader("x-requested-with").equals("XMLHttpRequest")  ) {              
             response.setHeader("sessionstatus", "timeout");  
             response.sendError(518, "session timeout.");  
    
        }

    (2)对应的需要使用该功能的jsp中加入以下代码

    /**
     * 设置未来(全局)的AJAX请求默认选项
     * 主要设置了AJAX请求遇到Session过期的情况
     */
    $.ajaxSetup({
        type: 'POST',
        complete: function(xhr,status) {
            var sessionStatus = xhr.getResponseHeader('sessionstatus');
            if(sessionStatus == 'timeout') {
                //强制重新登录
                alert("由于您长时间没有操作, session已过期, 请重新登录.");
                window.location.href = './loginTZBSM';
            }
        }
    });

    至此设置完成

    展开全文
  • session失效/一直变化的几种原因

    千次阅读 2019-03-05 19:49:16
    之前学习java,sevlet编程,遇到一个困扰很久的问题,经常(非必现)不到1,2分钟,后端获取的JSESSIONID就失效了。 网上查了好久,看到有几种原因,以后遇到类似的问题可以参考入手方向. 1.session设置的失效/超时...

    之前学习java,sevlet编程,遇到一个困扰很久的问题,经常(非必现)不到1,2分钟,后端获取的JSESSIONID就失效了。

    网上查了好久,看到有几种原因,以后遇到类似的问题可以参考入手方向.

    1.session设置的失效/超时时间(

    代码中:session.setMaxInactiveInterval(),
    web.xml配置文件中<session-timeout>60</session-timeout>

    2.response.reset(),会使sessionid发生变化

    3.tomcat中session的钝化时间 https://blog.csdn.net/aa8568849/article/details/71079487

    4.跨域问题

    5.ie的iframe https://blog.csdn.net/en_joker/article/details/78250428

    总结:最后我的原因是:我傻叉的在servlet A中设置了

    session.setMaxInactiveInterval(60);//大傻叉!!这里60是指一分钟

    而我前端有两个servlet,A和B,所以只要我请求过servlet A之后,session的过期时间就是1分钟,如果不请求servlet A,session的过期时间就没有问题,这也解释了为什么不是必现的原因

    展开全文
  • session突然失效

    2020-01-08 21:07:39
    session突然失效了(智障问题记录) 最近写项目的时候用到了session,结果登录了之后,没有起到保存session的作用,排查了半个小时, 突然想起来 ,我把浏览器的session记录允许给关了,因为之前每次在idea修改后,...

    session突然失效了(智障问题记录)

    最近写项目的时候用到了session,结果登录了之后,没有起到保存session的作用,排查了半个小时,
    突然想起来
    ,我把浏览器的session记录允许给关了,因为之前每次在idea修改后,在浏览器那边检查是之前的,还要我刷新一下,我以为是页面缓存,就把session关了(然后关了还是得重新刷新。。。。)

    在这里插入图片描述
    就是这个设置Cookie,当时不允许,导致后端无法使用session。

    展开全文
  • session失效问题

    2019-04-09 10:20:54
    一个单体应用,启动两个服务,在同一个浏览器访问,登录上一个A服务后,再登录B服务,会导致A的session失效 分析 两个相同服务,彼此应该是没有影响的,但产生了影响,且不同浏览器就没有影响 源码 在一个登录...
  • 有关什么情况下session失效

    万次阅读 2018-05-06 06:33:48
    以前发了一个帖子,觉得好奇很多人竟然认为关闭浏览器session就失效了 或者认为session失效和关闭浏览器有关系很多评论 让我很诧异啊这边统一回复一下吧 可以肯定的说session失效和浏览器是没有任何关系的session...
  • session失效问题的可能原因

    千次阅读 2017-05-02 11:30:07
    最近写网页,发现session只要一分钟就会失效(取不出存在session里的值),设置了session的最大不活动时间为30分钟,但是依然过一分钟session失效了,然后给session加了生死监听,确实要过30分钟,session上的监听...
  • Java web session失效时间配置及详解

    千次阅读 2018-11-23 17:03:36
    一 关于session 1 session机制 在web程序中使用session来记录客户端状态,是服务器端使用的一种记录客户端状态的机制。 session技术则是服务端的解决方案,通过服务器保持状态的。 session通常被翻译成会话,...
  • 通常情况下,我们所说的失效是指我们无法继续对其进行利用。对此我们必须要清楚自己口中所说的失效到底是什么意思。 事实上,当我们关闭浏览器时,我们只是关闭了客户端,而 session 是存储在服务端上的,所以从...
  • 设置session失效时间的三种方法

    万次阅读 2015-04-25 15:07:21
    session-timeout(web.xml)元素与session.setMaxInactiveInterval()函数 a) web app server中,如websphere里可以设置超时时间为30分钟 b)在web.xml中的session-config配置 session-timeout元素(WEB.XML文件中的...
  • springboot2设置session失效时间

    千次阅读 2019-03-14 17:45:47
  • Java设置session超时(失效)的三种方式

    万次阅读 多人点赞 2013-03-28 11:45:25
    1. 在web容器中设置(此处以tomcat为例) 在tomcat-5.0.28\conf\web.xml中设置,...Tomcat默认session超时时间为30分钟,可以根据需要修改,负数或0为不限制session失效时间。 2. 在工程的web.xml中设置
  • 监听session,在其失效时触发事件

    万次阅读 2016-12-01 15:10:02
    记录登录用户的在线时间,开始时间设为用户登录时,结束时间为session失效。 1、创建一个监听器 MySessionListener implements HttpSessionListener{ @Override public void sessionCreated(HttpSessionEvent se){...
  • 跨域访问会导致session失效

    千次阅读 2016-11-29 21:37:38
    未跨域Ajax异步请求时,session保持不变未跨域时Ajax请求不同的action时,session保持不变跨域Ajax异步请求时,每次请求都是一个新的session一些帖子供参考http://www.cnblogs.com/interdrp/p/4056525.html ...
  • Java设置session失效的时间(不使用框架) 在一般系统登录后,都会设置一个当前session失效的时间,以确保在用户长时间不与服务器交互,自动退出登录,销毁session 具体设置的方法有三种: 1.在web容器中设置(以...
  • session永不失效

    万次阅读 2012-02-20 21:12:06
    保持Session的方法很但是 -1 是行不通的,因为session计算时间以分钟为单位,必须是大于等于1的整数。 但是我们也不能这样, 1441 因为session的取值范围是1-1440(就是24小时 ) 1: 所以想...
  • session失效的设置方法可以分为两大类四小种: 1. 中间件(以Tomcat为例) 1.1. tomcat/conf/web.xml(推荐) 1.2. tomcat/conf/server.xml 2. webapp(程序本身) 2.1. WEB-INF/web.xml(推荐) 2.2. Java硬...
  • tomcat重启的时候会把session写入到一个文件,待启动后读取这个文件,使session保留,如果需要设置重启服务器的时候使session失效,可以通过修改配置文件"conf/context.xml" ,去掉 pathname="" />和的注释,然后...
  • 修改tomcat默认的session时间永不过期

    万次阅读 2012-03-19 09:55:20
    session超时设置 具体设置很简单,方法有三种: ... (1)在主页面或者公共页面中加入:session.setMaxInactiveInterval(600);参数600单位是秒,即在没有10分钟活动后,session失效。  这里要注意这个s
  • php Session失效的原因

    千次阅读 2018-09-10 11:27:49
    最近公司的项目出现了一个Session失效的问题,程序运行之后,session不到几分钟就失效了。后来在网上看了很久,了解了它的机理:Session在lunix里面是存储在公共的路径里面,这就会导致一个问题,如果程序里面有很多...
1 2 3 4 5 ... 20
收藏数 108,371
精华内容 43,348
关键字:

session失效