精华内容
下载资源
问答
  • 设定tomcatsession过期时间的三种方式
  • 1、在tomcat——>conf——>servler.xml文件中定义: <Context path="/test" docBase="/test"  defaultSessionTimeOut="3600" isWARExpanded="true"  isWARValidated="false" isInvokerEnabled="true" ...

    1、在tomcat——>conf——>servler.xml文件中定义:

    <Context path="/test" docBase="/test"  
      defaultSessionTimeOut="3600" isWARExpanded="true"  
      isWARValidated="false" isInvokerEnabled="true"  
      isWorkDirPersistent="false"/>
    

    2、在web.xml中定义:这个针对具体项目:

    <session-config>  
    <session-timeout>20</session-timeout>  
    </session-config>
    

    3、在程序中定义:这个就针对具体页面了:

    session.setMaxInactiveInterval(30*60);
    

    4、配置tomcat的session持久化:

    <Manager
    className="org.apache.catalina.session.PersistentManager"
    saveOnRestart="true"
    maxActiveSession="-1"
    minIdleSwap="0"
    maxIdleSwap="30"
    maxIdleBackup="0"
    > 
    <Store
    className="org.apache.catalina.session.FileStore"
    checkInterval=”60”
    directory="../session"/>
    </Manager>
    

    <Store 
    calssName="org.apache.catalina.JDBCStore"
    driverName="com.mysql.jdbc.Driver" 
    connectionURL="jdbc:mysql://localhost/tomsessionDB?user=root&password=" 
    sessionTable="tomcat_session" 
    sessionIdCol="session_id" 
    sessionDataCol="session_data" 
    sessionValidCol="session_valid" 
    sessionMaxInactiveCol="max_inactive" 
    sessionLastAccessedCol="last_access"
    sessionAppCol="app_name" 
    checkInterval="60" 
    debug="99" />
    

    maxActiveSessions-可处于活动状态的session数,default -1 不限制

    checkInterval - 检查session是否过期的时间间隔,default 60s

    saveOnRestart-服务器关闭时,是否将所有的session保存到文件中;
    minIdleSwap/maxIdleSwap-session处于不活动状态最短/长时间(s),sesson对象转移到File Store中;(-1表示没有限制)
    maxIdleBackup-超过这一时间,将session备份。(-1表示没有限制)

    directory-文件存储位置work\Catalina\host name\web app\session\文件名.session

    展开全文
  • Tomcat设置session超时的几种方式

    千次阅读 2017-05-09 10:11:59
    Tomcat设置session超时的几种方式 2016-07-18 16:19 2674人阅读 评论(0) 收藏 举报 Tomcat的会话超时可以在多个级别上设置tomcat实例级别、Web应用级别、servlet级别以及运行时Context代码...

    Tomcat设置session超时的几种方式

      2674人阅读  评论(0)  收藏  举报

    Tomcat的会话超时可以在多个级别上设置:tomcat实例级别、Web应用级别、servlet级别以及运行时Context代码级别。 较低级别的设定会覆盖较高级别的设定。 

     

    Tomcat可以在以下几个地方设置session超时:

     

    1 Web容器级别

    在conf/web.xml中

    Xml代码   收藏代码
    1. <!-- ==================== Default Session Configuration ================= -->  
    2.   <!-- You can set the default session timeout (in minutes) for all newly   -->  
    3.   <!-- created sessions by modifying the value below.                       -->  
    4.   
    5.     <session-config>  
    6.         <session-timeout>30</session-timeout>  
    7.     </session-config>  

     

    这里是以分钟为单位的,默认是30分;

     

    2 webapp级别

    在webapp中的 WEB-INF/web.xml

    Xml代码   收藏代码
    1. <!-- 配置Session失效时间 -->  
    2. <session-config>  
    3.         <session-timeout>30</session-timeout>  
    4. </session-config>  

    也是以min为单位;

     

    3 应用程序代码中:硬编码

    Java代码   收藏代码
    1. session.setMaxInactiveInterval(30*60);//以秒为单位  

     

    优先级,越细粒度优先级越高,也就是3>2>1

     

    4 还要一种配置,但现在比较少见了,因为需要将Context配置在server.xml里:

    这就是修改conf/server.xml

    Xml代码   收藏代码
    1. <Context path="/test" docBase="/home/httpd/html/test"  
    2.     defaultSessionTimeOut="3600" isWARExpanded="true"  
    3.     isWARValidated="false" isInvokerEnabled="true"  
    4.     isWorkDirPersistent="false"/>  

     单位为秒

     

     

    附:

    重启时保持会话 
        在关闭Tomcat实例/取消Web应用部署时,缺省会把当前的活动会话保存到硬盘上,并在重启启动/部署 时在把会话从硬盘上加载到内存中。 
        文件保存在各目录下的SESSIONS.SER中。有时可能会话中保存了敏感信息,或者不希望使用这个特 性,可以配置Context.xml文件关闭这个选项。 
        配置 manager.pathname == ""即可,形如: 
                    <Manager pathname="" />   


    文章转载于:http://jiangshuiy.iteye.com/blog/1843622
    展开全文
  • 设置Tomcat Session超时时间的三种方式

    千次阅读 2017-05-01 11:41:29
    Tomcat Session过期时间 ...可以采用如下三种方式,设置这个连接(Session)的过期时间:前两个都是修改tomcat的配置文件conf 1. 在server.xml中定义context时采用如下定义: xml 代码 <Cont

    Tomcat Session过期时间

    设置过期时间三种方式:

    设置server.xml

    <Context path="/livsorder" docBase="/home/httpd/html/livsorder"             
      isWARExpanded="true"       
     isWARValidated="false" 
     isInvokerEnabled="true"       
     isWorkDirPersistent="false"
      defaultSessionTimeOut="1800"/><!--3600秒=1小时,在此设置时间-->
    

    设置web.xml

    <session-config>     
        <!--其中30表示30分钟-->   
        <session-timeout>30</session-timeout>    
    </session-config>  
    

    利用servlet api修改

    public class MyFileter implements Filter {
        @Override
        public void init(FilterConfig filterConfig) throws ServletException {}
    
        @Override
        public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain)  {
    	   HttpSession session = request.getSession();
           //设置单位为秒,设置为-1永不过期。 
    	   session.setMaxInactiveInterval(30*60); 
           filterChain.doFilter(servletRequest, servletResponse);
        }
        @Override
        public void destroy() {}
    }
    
    展开全文
  • 在应用中需要设置session超时时间,然后就习惯的在application.properties配置文件中设置如下, server.session.timeout=90 这里把超时时间设置的短些,主要想看看到底有没有起作用(不能设值30min然后再看吧...

    最近让Spring Boot内嵌Tomcat的session超时问题给坑了一把。

    在应用中需要设置session超时时间,然后就习惯的在application.properties配置文件中设置如下,

    server.session.timeout=90

    这里把超时时间设置的短些,主要想看看到底有没有起作用(不能设值30min然后再看吧,那样太不人道了)。结果没起作用,百度下发现Spring Boot 2后,配置变成如下,

    server.servlet.session.timeout=90

    但结果依然不起作用,后来就断断续续的懵了逼的找问题原因,各种百度,google,最后觉得还是看源代码吧,顺便也学习下。

    1. 既然是Session超时时间问题,那就看看对Session的实现 - StandardSession

    其中有isValid()方法

        /**
         * Return the <code>isValid</code> flag for this session.
         */
        @Override
        public boolean isValid() {
    
            if (!this.isValid) {
                return false;
            }
    
            if (this.expiring) {
                return true;
            }
    
            if (ACTIVITY_CHECK && accessCount.get() > 0) {
                return true;
            }
    
            if (maxInactiveInterval > 0) {
                int timeIdle = (int) (getIdleTimeInternal() / 1000L);
                if (timeIdle >= maxInactiveInterval) {
                    expire(true);
                }
            }
    
            return this.isValid;
        }

    看了下,这里的 timeIdle >= maxInactiveInterval就是触发session超时的判断,满足则调用 expire(true)。那么问题就来了,什么时候调用isValid()?

    2. 后台肯定有定时调用isValid()的线程

    查看调用isValid()的相关类如下,StandardManager和ManagerBase入了法眼了。

    StandardManager中的注解表明是用来让所有存活的session过期的,应该是在web容器销毁时调用的,所以就只看 ManagerBase

            // Expire all active sessions
            Session sessions[] = findSessions();
            for (int i = 0; i < sessions.length; i++) {
                Session session = sessions[i];
                try {
                    if (session.isValid()) {
                        session.expire();
                    }
                } catch (Throwable t) {
                    ExceptionUtils.handleThrowable(t);
                } finally {
                    // Measure against memory leaking if references to the session
                    // object are kept in a shared field somewhere
                    session.recycle();
                }
            }

    ManagerBase,注解表明是我们想要的,接下来看调用processExpires()的类。还是ManagerBase。

        /**
         * Invalidate all sessions that have expired.
         */
        public void processExpires() {
    
            long timeNow = System.currentTimeMillis();
            Session sessions[] = findSessions();
            int expireHere = 0 ;
    
            if(log.isDebugEnabled())
                log.debug("Start expire sessions " + getName() + " at " + timeNow + " sessioncount " + sessions.length);
            for (int i = 0; i < sessions.length; i++) {
                if (sessions[i]!=null && !sessions[i].isValid()) {
                    expireHere++;
                }
            }
            long timeEnd = System.currentTimeMillis();
            if(log.isDebugEnabled())
                 log.debug("End expire sessions " + getName() + " processingTime " + (timeEnd - timeNow) + " expired sessions: " + expireHere);
            processingTime += ( timeEnd - timeNow );
    
        }

    调用processExpires()

        /**
         * Frequency of the session expiration, and related manager operations.
         * Manager operations will be done once for the specified amount of
         * backgroundProcess calls (ie, the lower the amount, the most often the
         * checks will occur).
         */
        protected int processExpiresFrequency = 6;
        /**
         * {@inheritDoc}
         * <p>
         * Direct call to {@link #processExpires()}
         */
        @Override
        public void backgroundProcess() {
            count = (count + 1) % processExpiresFrequency;
            if (count == 0)
                processExpires();
        }

    看到backgroundProcess()方法名就知道离真理不远了。其调用如下,在StandardContext类中,

        @Override
        public void backgroundProcess() {
    
            if (!getState().isAvailable())
                return;
    
            Loader loader = getLoader();
            if (loader != null) {
                try {
                    loader.backgroundProcess();
                } catch (Exception e) {
                    log.warn(sm.getString(
                            "standardContext.backgroundProcess.loader", loader), e);
                }
            }
            Manager manager = getManager();
            if (manager != null) {
                try {
                    manager.backgroundProcess();
                } catch (Exception e) {
                    log.warn(sm.getString(
                            "standardContext.backgroundProcess.manager", manager),
                            e);
                }
            }
            WebResourceRoot resources = getResources();
            if (resources != null) {
                try {
                    resources.backgroundProcess();
                } catch (Exception e) {
                    log.warn(sm.getString(
                            "standardContext.backgroundProcess.resources",
                            resources), e);
                }
            }
            InstanceManager instanceManager = getInstanceManager();
            if (instanceManager instanceof DefaultInstanceManager) {
                try {
                    ((DefaultInstanceManager)instanceManager).backgroundProcess();
                } catch (Exception e) {
                    log.warn(sm.getString(
                            "standardContext.backgroundProcess.instanceManager",
                            resources), e);
                }
            }
            super.backgroundProcess();
        }

    但是还没有看到线程的创建,继续查看调用,ContainerBase.ContainerBackgroundProcessor

        /**
         * Private thread class to invoke the backgroundProcess method
         * of this container and its children after a fixed delay.
         */
        protected class ContainerBackgroundProcessor implements Runnable 
                    while (!threadDone) {
                        try {
                            Thread.sleep(backgroundProcessorDelay * 1000L);
                        } catch (InterruptedException e) {
                            // Ignore
                        }
                        if (!threadDone) {
                            processChildren(ContainerBase.this);
                        }
                    }

    看到曙光了!看来后台线程每隔 backgroundProcessorDelay * processExpiresFrequency (s)来判断session是否过期。

    默认值:

    backgroundProcessorDelay  = 30s

    ServerProperties.class
         /**
             * Delay between the invocation of backgroundProcess methods. If a duration suffix
             * is not specified, seconds will be used.
             */
            @DurationUnit(ChronoUnit.SECONDS)
            private Duration backgroundProcessorDelay = Duration.ofSeconds(30);

    processExpiresFrequency = 6

    所以默认情况下后台线程每隔3min去判断session是否超时。这样我之前设置server.servlet.session.timeout=90s,没办法看到效果的。

    另外还要注意后台对timeout的处理以min为单位,即90s在后台会认为是1min的。

    TomcatServletWebServerFactory.class
    
        private long getSessionTimeoutInMinutes() {
            Duration sessionTimeout = getSession().getTimeout();
            if (isZeroOrLess(sessionTimeout)) {
                return 0;
            }
            return Math.max(sessionTimeout.toMinutes(), 1);
        }

     

    转载于:https://www.cnblogs.com/hello-yz/p/10993707.html

    展开全文
  • checkInterval - 检查session是否过期的时间间隔,default 60s saveOnRestart-服务器关闭时,是否将所有的session保存到文件中; minIdleSwap/maxIdleSwap-session处于不活动状态最短/长时间(s),sesson对象转移...
  • from:‍... ‍tomcat在5.5以后,就没有自带admin项目了,如果要从http://localhost:8080界面进入tomcat管理页面,需 要从网上下载对应的tomcat-admin.zip,举个例...
  • 在web容器中设置(以tomcat为例)在tomcat-7.0\conf\web.xml中设置,以下是tomcat7.0中默认配置:30tomcat默认session超时时间为30分钟,可以根据需要修改,负数或0为不限制session失效时间这里要...
  • spring boot session超时设置

    千次阅读 2019-10-30 15:47:59
    spring boot 2.0以后,session超时在application.properties设置如下: server.servlet.session.timeout=120 参考: https://www.cnblogs.com/ergexy/p/9684933.html
  • 一、代码设置方法 request.getSession().setMaxInactiveInterval(-1);//设置session永不过期 request.getSession()....//单位秒 这里的优先级高于web.xml设置超时 二、设置web.xml <session-config&...
  • 在web容器中设置(此处以tomcat为例)在tomcat-5.0.28\conf\web.xml中设置,以下是tomcat 5.0中的默认配置:30Tomcat默认session超时时间为30分钟,可以根据需要修改,负数或0为不限制session失效时间。2. 在工程的...
  • 由于session值之前没有设置,以至于刚登录的网站,不到一分钟就超时了,总结了一下,原来是session过期的原因,以下是设置session时间的3个方法:1. 在tomcat——>conf——>servler.xml文件中定义:...
  • 修改tomcat默认的session时间

    千次阅读 2019-04-08 11:12:06
    session超时设置 具体设置很简单,方法有三种: 在主页面或者公共页面中加入:session.setMaxInactiveInterval(600);参数600单位是秒,即在没有10分钟活动后,session将失效。  这里要注意这个session设置时间是...
  • tomcat 设置会话超时

    千次阅读 2017-04-24 10:54:08
    1、为单个WEB设置SESSION 在web.xml中添加 xml 代码 [html] view plain copy session-config>     session-timeout>15session-timeout>//单位为分钟    session-config>
  • tomcat的conf目录下的web.xml中: Xml代码 &lt;session-config&gt; &lt;session-timeout&gt;30&lt;/session-timeout&.../session-config&... 这个就是session超时时间,单位分钟...
  • Tomcat默认连接超时时间

    千次阅读 2019-04-03 19:56:01
    Tomcat默认连接超时时间 Tomcat Session过期时间 Tomcat采用数据库连接池技术,当用户在一定时间不对数据库有操作时间后,就自动关闭这个连接,这是为了更好的利用资源,防止浪费宝贵的数据库连接资源。 可以采用...
  • session超时设置 具体设置很简单,方法有三种:  (1)在主页面或者公共页面中加入:session.setMaxInactiveInterval(600);参数600单位是秒,即在没有10分钟活动后,session将失效。  这里要注意这个session设置的...
  • 主要给大家介绍了关于Tomcat如何监控并删除超时Session的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Tomcat具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
  • session 超时时间设置

    2018-08-15 18:05:27
    在Java Web开发中,Session为我们提供了很多方便,Session是由浏览器和服务器之间维护的。Session超时理解为:浏览器和服务器之间创建了一个...设置Session超时时间方式: 方式一: 在web.xml中设置session...
  • 下面要给大家带来的实例就是和java设置session超时时间相关的内容,一起来看看具体实现方式吧。一般的系统登陆了之后,都会有设置一个当前的session失效(超时)时间,这样主要是为了确保,在用户长时间不和服务器交互...
  • 在Java Web开发中,Session为...Session超时理解为:浏览器和服务器之间创建了一个Session,由于客户端长时间(休眠时间)没有与服务器交互,服务器将此Session销毁,客户端再一次与服务器交互时之前的Sessi
  • 系统默认超时时间是180000毫秒(30分钟)longtimeout=SecurityUtils.getSubject().getSession().getTimeout();...可以通过下面2中方式设置自定义的超时时间。1、配置文件<!--会话管理器--> <beani...
  • tomcat修改session超时

    2015-03-18 15:33:31
    Tomcat Session过期时间Tomcat采用数据库连接池技术,当...可以采用如下两种方式,设置这个连接(Session)的过期时间:两个都是修改tomcat的配置文件conf1. 在server.xml中定义context时采用如下定义: xml 代码<...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 26,510
精华内容 10,604
关键字:

tomcat设置session超时时间