ホームページ  >  記事  >  データベース  >  Tomcat 中的 Session

Tomcat 中的 Session

WBOY
WBOYオリジナル
2016-06-07 16:26:04899ブラウズ

废话少说,先来看看保存session的4种方案 1.在Web容器的内存中,最常见,最原始的,纯天然,无人工的。 2.跟上面第一种差不多,只是保存在文件里了,如果忽然down机,下次重启session还在。 3.通过java JDBC保存在数据库里面。 4.通过中央式缓存 Memcached

废话少说,先来看看保存session的4种方案
1.在Web容器的内存中,最常见,最原始的,纯天然,无人工的。
2.跟上面第一种差不多,只是保存在文件里了,如果忽然down机,下次重启session还在。
3.通过java JDBC保存在数据库里面。
4.通过中央式缓存 Memcached 集中管理。

1、2就不讨论了,说一下3、4 各有优势

第3点的优势:每台机器连接相同的数据库 session 将集中被管理起来,不会在每个Tomcat之间互相大量复制,减少系统的整个运行压力,另外,在持久化的过程中使用的是 org.apache.catalina.session.JDBCStore对象 Tomcat 下 catalina.jar的一部分,不需要另外引入其他api,并且session数据一直保存在数据库中,而第4点 Memcached 重启 里面的回话也就销毁,需要另外引入API,但是从执行效率上看大于第3种。
所以可以根据你的需要选择不同的方案。

查找了网上N多资料,都是互相抄袭并且非常严重!!连错的地方都一起抄过来,我为国人感到可耻!最后还是从一个日本blog上看见了一篇日志得到了启发。
查看地址:http://d.hatena.ne.jp/stdcall/20070102/1167688088

以下是测试程序。环境:tomcat5.5 / MySQL ===

========================Server.xml =============================
    path="/test"
    reloadable="true"
    source="org.eclipse.jst.j2ee.server:test"
    backgroundProcessorDelay="1" >
        distributable="true"
      duplicates="-1"
      saveOnRestart="true"
      maxActive="-1"
      maxActiveSessions="0"
      minIdleSwap="-1"
      maxIdleSwap="-1"
      maxIdleBackup="-1"
      maxInactiveInterval="-1"
      sessionCounter="-1" >

            checkInterval="1"
        connectionURL="jdbc:mysql://172.16.2.211/test?user=root1&password=123456"
         driverName="com.mysql.jdbc.Driver"
        sessionAppCol="app_name"
        sessionDataCol="session_data"
        sessionIdCol="session_id"
        sessionLastAccessedCol="last_access"
        sessionMaxInactiveCol="max_inactive"
        sessionTable="tomcat_sessions"
        sessionValidCol="valid_session" />
 

 

========================MySQL 建表语句 =============================
CREATE TABLE `tomcat_session` (
  `session_id` varchar(100) NOT NULL,
  `valid_session` char(1) NOT NULL,
  `max_inactive` int(11) NOT NULL,
  `last_access` bigint(20) NOT NULL,
  `app_name` varchar(255) DEFAULT NULL,
  `session_data` mediumblob,
  PRIMARY KEY (`session_id`),
  KEY `kapp_name` (`app_name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

=======================JSP 测试程序 =============================



Insert title here


session id =


    counter = ( counter == null )
        ? new Integer(1) : new Integer(counter.intValue() + 1);
    session.setAttribute("counter",counter);
%>
counter =


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。