精华内容
下载资源
问答
  • Session的管理,tomcat两个实现类:org.apache.catalina.session.StandardManager和org.apache.catalina.session.PersistentManagerStandardManager 默认的方法 可以配置的地方比较少PersistentManager 提供了很灵活...

    Session的管理,tomcat两个实现类:org.apache.catalina.session.StandardManager和org.apache.catalina.session.PersistentManager

    StandardManager 默认的方法 可以配置的地方比较少

    PersistentManager 提供了很灵活的管理方式 配置性强

    形式一:存储在本地文件中:配置conf目录里的context.xml文件

    1.修改的文件: $Tomcat_HOME/conf/context.xml

    2.在context.xml文件根节点下面添加以下内容:

    debug=0saveOnRestart="true"maxActiveSession="-1"minIdleSwap="-1"maxIdleSwap="-1"maxIdleBackup="-1"

    3.如果session中存有javabean对象,需要该javabean实现Serializable接口、且包含空构造函数。

    形式二:存储在数据库中 配置store节点

    className:Session的管理类,tomcat将会通过定义的接口来应用该类生成的对象。

    debug:Session管理器的跟踪级别。

    saveOnRestart:(true/false)配置服务重启工程中对session的处理,若为true,则关闭前把有效的session保存,启动后重新载入

    maxActiveSession:活动状态Session的最大数,为-1时则不限制,否则Session Manager将会把超出的Session对象转移到Session Store中。

    minIdleSwap:Session不活动的最短时间,超过该时间,Session Manager 可能会把该Session对象转移到Session Store中,单位为秒。

    maxidleSwap:Session不活动的最长时间,超过该时间,Session Manager 将会把该Session对象转移到Session Store中,该Session将不在内存中。

    maxidleBackup: Session不活动的最长时间,超过该时间,Session Manager 将会把该Session对象备份到Session Store中,但该Session对象依然存在内存中。

    Store:指定实现持久化的类和Session存放的文件位置,如该例子中指定的类是:org.apache.catalina.session.FileStore,而Session对象存放的目录则是tomcat根目录下的 session文件夹

    展开全文
  • Session的主要数据被存储在服务器内存中,而服务器会为每个在线用户创建一个...Session钝化机制的本质就在于把服务器中不经常使用的Session对象暂时序列到系统文件系统或是数据库系统中,当被使用时反序列到内存...

    Session的主要数据被存储在服务器内存中,而服务器会为每个在线用户创建一个Session对象,当在线用户很多时,例如同时有几万或是几十万在线的情况下,Session内存的开销将会十分巨大,会影响Web服务器性能。而Session的钝化机制刚好可解决此问题。Session钝化机制的本质就在于把服务器中不经常使用的Session对象暂时序列化到系统文件系统或是数据库系统中,当被使用时反序列化到内存中,整个过程由服务器自动完成。

    实现:

    要完成session持久化,存放在session里的对象必须要实现java.io.Serializable接口。

    Tomcat通过两个session管理类实现session持久化,StandardManager (默认),PersistentManager

    StandardManager:不使用任何的Store,当Tomcat正常关闭,重启或Web应用重新加载时,它会将内存中的session序列化到Tomcat目录下

    /work/Catalina/host_name/webappname/SESSIONS.ser文件中。当Tomcat重启或应用加载完成后,tomcat会将文件中的session重新还原到内存中。

    注:如果突然终止该服务器,则所有会话都将丧失,因为StandardManager没有机会实现存盘处理。

    PersistentManager:通过使用Store,将内存中的session备份到文件或数据库中。当备份一个session对象时,该session对象会被复制到存储器中,而原对象仍然留在内存中。因此如果服务器崩溃,就可以从存储器中获取活动的session对象。当session被换出时,他会被移动到存储器中,因为当前活动的session对象超过了上限值,或者session对象闲置了过长时间。换出session节省内存空间。

    配置:

    Tomcat默认是已经启用持久化配置,若要禁用持久化功能,则只需要在节点里配置

    持久化配置可进行全局配置和针对某一站点进行配置。全局配置需要在cof文件夹context.xml的

    节点中配置,若要针对某一站点配置则需要在cof文件夹server.xml的

    节点中添加配置。

    StandardManager:

    className=”org.apache.catalina.session.StandardManager”

    debug=”0”

    maxInactiveInterval=”-1″

    />

    PersistentManager:

    方式1:

    className="org.apache.catalina.session.PersistentManager"

    saveOnRestart="true"

    maxActiveSession="-1"

    minIdleSwap="0"

    maxIdleSwap="30"

    maxIdleBackup="0"

    >

    className="org.apache.catalina.session.FileStore"

    checkInterval=”60”

    directory="../session"/>

    方式2:

    和方式1的区别:

    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

    展开全文
  • Tomcat7 session 持久化关闭

    千次阅读 2018-05-08 16:46:47
    Tomcat7 session 持久化关闭tomcat 7默认开启session持久化功能,这样当你的tomcat重启之后,会自动重新加载session,但是有时候我们不需要这个功能。

    Tomcat7 session 持久化关闭

    tomcat 7默认开启session持久化功能,这样当你的tomcat重启之后,会自动重新加载session,这样当tomcat重启了保存在session里面的信息也不会丢失,但是有时候我们并不需要这个功能。

    所以我们就有了关闭session持久化的需求。

    不过这个持久化在使用eclipse加载tomcat的时候是没有效果的,但是部署在服务器就产生效果了,也不知道是为啥。

    打开tomcat目录>conf>context.xml,这是所有web应用共享的配置信息。
    找到下面的一段话

        <!-- Uncomment this to disable session persistence across Tomcat restarts -->
        <!--
        <Manager pathname="" />
        -->

    注释翻译过来就是“取消注释以禁用session持久化当tomcat重启的时候”,所以只要将<Manager pathname="" />注释取消,那么tomcat重启的时候就不会进行持久化了。

    默认情况下,tomcat使用StandardManager来管理session,当tomcat关闭,或者web应用被重新加载的时候,会对内存中的HttpSession对象进行持久化,把它们保存在文件系统中,默认的文件是(比如:host name是localhost,app name是test):
    work\Catalina\localhost\test\SESSIONS.ser

    展开全文
  • tomcat session 持久化

    2013-01-18 15:48:31
     今天看的是tomcat session持久化,关于session持久化我上官网上除了API没有找到相关的文档,只有在其它论坛网站上有很多哥们提到了。    所谓session持久化就是将内存中的session保存到磁盘(文件)中,Tomcat...

            最近对tomcat比较感兴趣,会陆续的发一些学习tomcat的心得。

     

            今天看的是tomcat session持久化,关于session持久化我上官网上除了API没有找到相关的文档,只有在其它论坛网站上有很多哥们提到了。

     

             所谓session持久化就是将内存中的session保存到磁盘(文件)中,Tomcat有两种标准的持久化方案:

    一种是保存在文件,另外一种是保存在数据库中。虽然session持久化用的很少,了解下还是可以的。

            默认情况下Tomcat提供的是StandardManager管理

    org.apache.catalina.session.StandardManager

            StandardManager 里面提供了很多参数来管理,诸如maxActiveSessions,pathname,

    maxInactiveInterval.... 还提供了load和unload方法来加载和持久化session。

    修改配置文件catalina_home/conf/context.xml,取消注释的Manager

    <!-- Uncomment this to disable session persistence across Tomcat restarts -->
        <!--
        <Manager pathname="" />
        -->

            当你正常关闭(直接关闭进程不算)tomcat的时候,tomcat会将session保存在 catalina_home/work/catalina/localhost/项目名称/session.ser文件中。

           一、保存在文件中

            StandardManager可以保存在文件中,还有FileLoad也可以保存在文件中,不过FileLoad需要PersistentManager的帮助。这对我们来说更加的方便了,因为持久化逻辑,和持久化的动作分开了。

    我们在catalina_home/conf/context.xml中添加如下配置信息:

    <Manager className="org.apache.catalina.session.PersistentManager">
    	debug=0
            saveOnRestart="true"
    	maxActiveSession="-1"
    	minIdleSwap="-1"
    	maxIdelSwap="-1"
    	<Store className="org.apache.catalina.session.FileStore" directory="../session"/>
        </Manager>

        重启之后,让服务器产生session,然后正常关闭。

        持久化的session文件在catalina_home/work/catalina/localhost/session下

     

    二、保存在数据库中

        使用tomcat中

    org.apache.catalina.JDBCStore

        具体参数看源码吧,这里我上网上找了一个配置:

    <Store calssName="org.apache.catalina.JDBCStore" driverName="com.mysql.jdbc.Driver" 
    connectionURL="jdbc:mysql://localhost/session?usename=xxx&password=xxx" 
    sessionTable="session" sessionIdCol="session_id" sessionDataCol="session_data" 
    sessionValidCol="sessionValid" sessionMaxInactiveCol="maxInactive" 
    sessionLastAccessedCol="lastAccess" sessionAppCol="appName" checkInterval="60" debug="99" /> 
    
    

     这样就能把session 保存到数据库中了。

     

    三、自定义存储方式

        看看三个类之间的关系:

    StandardManager extends ManagerBase
    
    PersistentManager extends PersistentManagerBase
    PersistentManagerBase extends ManagerBase
    
    FileStore extends StoreBase
    JDBCStore extends StoreBase

       

            所以我们如果想改变存储的方式,如果想存缓存中(eg: memcached这样的)

    我们可以写一个类继承StoreBase即可,我这里写了一个简单的,里面什么功能都没有,只是一些简单的systemout 来演示下:

    package cn.tang;
    
    import org.apache.catalina.Session;
    import org.apache.catalina.session.StoreBase;
    
    public class MySessionStore extends StoreBase{
    
    	public Session load(String s) throws ClassNotFoundException, IOException {
    		System.out.println("---------invoke load method------------");
    		return null;
    	}
    
    	public void remove(String s) throws IOException {
    		System.out.println("---------invoke remove method------------");
    	}
    
    	public void save(Session session) throws IOException {
    		System.out.println("---------invoke save method------------");
    	}
    
    	public void clear() throws IOException {
    		System.out.println("---------invoke save method------------");
    	}
    
    	public int getSize() throws IOException {
    		System.out.println("---------invoke save method------------");
    		return 0;
    	}
    
    	public String[] keys() throws IOException {
    		System.out.println("---------invoke save method------------");
    		return null;
    	}
    	
    }
    

     打成一个jar包,放入catalina_home/lib中,同理修改context.xml文件

    <Manager className="org.apache.catalina.session.PersistentManager">
    	debug=0
            saveOnRestart="true"
    	maxActiveSession="-1"
    	minIdleSwap="-1"
    	maxIdelSwap="-1"
    	<Store className="cn.tang.MySessionStore"/>
        </Manager>

     重启之后,你会发现每个方法会有输出,关于如果写入到第三方缓存中,这是另一个话题了,有机会再说。

    PS: 关于Session和Memcached已经有成熟的解决方案了,感兴趣的可以看下面的链接,

    https://github.com/magro/memcached-session-manager

     

     

    展开全文
  • tomcat session持久化

    2016-03-05 16:29:32
    那么就进行session持久化。具体操作如下: 配置tomcat中conf文件夹下的context.xml。在context标签中增加如下内容,即可实现session持久化 className="org.apache.catalina.session.PersistentManager" ...
  • 最近同事在做Session外置的功能,我对Session持久化、共享也不太了解,学习一下。 一般来说,Tomcat原生的持久化Session方式,有StandardManager和PersistentManager。 版本说明:apache...
  • Tomcatsession 持久化1

    2017-10-29 14:57:00
    Tomcatsession 持久化1 Tomcatsession 持久化原理 几个概念: Manager 接口,其实就是指的是对 其Sesison 的管理, 其默认实现是StandardManager (内部没有任何Store对象实例,而仅仅是通过 ...
  • Tomcatsession 持久化2

    2017-10-31 01:08:00
    Tomcatsession 持久化2 通过前文Tomcatsession 持久化1,我们已经大概了解了这么个机制。但是我没能详细展开其底层的原理。 这篇文章,我想稍微深入一点点,再继续聊一聊其底层。 Tomcat 之...
  • Tomcat Session 持久化

    2019-09-13 10:01:40
    Session的主要数据被存储在服务器内存中,而服务器会为每个在线用户创建一个Session对象,当在线用户很多时,例如同时有几万或是几十万在线的情况下,Session内存的开销将会十分巨大,会影响Web服务器性能。...
  • tomcat session持久化

    2009-09-29 12:19:46
    tomcat6 中关闭服务 会自动把session持久化 存储在work目录下的 一个session.ser 对于Session的管理,tomcat两个实现类:org.apache.catalina.session.StandardManager和org.apache.catalina.session....
  • 为了避免这样的情况,在某些场合可以将服务器的session数据存放在文件系统或数据库中,这样的操作称为session对象的持久化session对象在持久化时,存放在其中的对象以序列化的形式存放,这就是为什么一般...
  • Tomcat7 session 持久化

    千次阅读 2015-08-28 10:03:10
    tomcat7 session默认是持久化的,tomcat7关闭或者重启,都会将内容持久化SESSION.ser文件, 这里推荐使用everything这个软件,查找这个文件。 参考官方文档:  戳我
  • tomcat6 中关闭服务 会自动把session持久化 存储在work目录下的 一个session.ser 对于Session的管理,tomcat两个实现类:org.apache.catalina.session.StandardManager和org.apache.catalina.session....
  • 自定义实现session持久化使用场景对于有登录校验的网站,tomcat 重启之后,刷新页面又得重新登录,影响用户体验.原因:tomcat 的session 在内存中,tomcat重启之后,内存中的session就销毁了.导致登录信息丢失session持久...
  • 最近同事在做Session外置的功能,我对Session持久化、共享也不太了解,学习一下。   一般来说,Tomcat原生的持久化Session方式,有StandardManager和PersistentManager。 版本说明:apache-to...
  • 一、去除TomcatSession持久化

    千次阅读 2015-03-13 09:22:01
    一、去除TomcatSession持久化 在默认的情况下,Tomcat 6.0的Session是持久化,请查看$TOMCAT_HOME$/conf/context.xml。在大概24行,去掉注释后不进行Session持久化: --> 这样可以解决TOMCAT...
  • tomcat配置session持久化

    2016-03-29 10:47:16
    Session的管理,tomcat两个实现类:org.apache.catalina.session.StandardManager和org.apache.catalina.session.PersistentManagerStandardManager 默认的方法 可以配置的地方比较少PersistentManager 提供了很灵活...
  • 2020年5月20日,Apache Tomcat官方发布安全公告,披露了一个通过Apache Tomcat Session持久化功能导致远程代码执行的漏洞。当Tomcat服务器使用了Session持久化功能时,不安全的配置会导致反序列化漏洞,攻击者通过...
  • 网上讲Session持久化的东西很多,我这里只写我实践过的, 系统化的东西还是网上自己去看吧。  本实例的环境:  操作系统:Mac OS  Tomcat:7.052  JDK:1.7   一、将Session持久化到文件.  1.新建一个...
  • 关于TomcatSession,我们都知道默认是保存在内存中。为了解决重启应用服务器Session丢失的问题,Tomcat内部的StandardManager会在正常的关闭时钝化活动的...
  • Tomcat_Session持久化

    2014-05-15 16:23:37
    Tomcat_Session持久化,详细讲解tomcatsession管理的原理和持久化原理
  • Tomcat默认的Session持久化的配置(默认是开启的)  在默认的情况下,Tomcat6是提供了这项功能的。请查看$TOMCAT_HOME$/conf/context.xml。在大概24行,你会看到注释:     -->       ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 492
精华内容 196
关键字:

session持久化tomcat