设为首页 收藏本站
查看: 333|回复: 0

[经验分享] 如何在tomcat重启时删除特定用户的session

[复制链接]

尚未签到

发表于 2017-2-4 13:30:56 | 显示全部楼层 |阅读模式
  问题背景:
  项目监控功能,多个用户使用同一个监控界面,其中一个用户重启了应用服务器,此时需要重置重启操作的用户的监控数据,需要删除该用户使用的相关sessionid,但是不能影响其他用户的sessionid
  解决方案:
  只要使当前用户的session 不被持久化就行,即在服务器重启时,使当前用户的session失效即可,所以在保存session的时候,可以采用没被序列化的对象进行保存,这样保存的session数据就不会被持久化了。
  如下为session持久化相关资料:
  HTTP是无状态的协议,所以每次到web的请求都是单独的连接。为了在一定时间内保存
客户的浏览记录,经常采用Cookie和Session在一段时间内来保存客户的交互数据。Cookie
比较简单。服务器在响应请求时将需要数据,以“键-值”对的形式通过响应信息保存在客户端,
当浏览器再次访问相同的应用时,客户端会将原先的Cookie通过请求信息带到服务器端,从而
保持用户的会话状态,但Cookie信息保存在客户端,存在较大的安全隐患,并且大部分浏览器
对Cookie的数目及数据大小有严格的限制(一般是4K)。为了解决Cookie的问题,可以采用
session方法。以下主要整理session方面的知识。
  1.session的原理
      session存放于服务器,web服务为客户端创建并、维护一个Session对象,用于存放数据。
      用户打开一个浏览器访问某个应用开始,到关闭浏览器为止交互过程称为一个“会话”。会话
开始时WEB服务创建Session对象,同时服务器会为该Session产生一个唯一编号,这个编号称
之为SessionID,服务器以Cookie的方式将SessionID存放在客户端。当浏览器再次访问该服务器时,
浏览器将SessionID作为Cookie信息带到服务器,服务器可以通过该SessionID检索到Session对
象,并对其需要访问的资源进行响应。当用户关闭浏览器时客户端保存SessionID的Cookie将会被清
除。需要注意的是,Cookie中仅仅保存了一个SessionID,具体的信息由web服务来维护,所以服务
器端的内存开销也会随之增大。
  2.session存放的信息
      Tomcat默认的方式是使用StandardManager来管理Session。Tomcat 默认会有session.ser的文
件,存放在“Tomcat主目录\work\Catalina\ localhost\应用名”路径下。tomcat启动后会读取这个文件,
载入其中的Session信息,然后把它删掉。
       也可以更改Tomcat默认的Session管理方式。在“Tomcat主目录\conf\Catalina”下建立应用对于
的Context定义,如建立名为test.xml的XML文件,文件的内容如下:
<Context docBase="/tomcat/webapps/test">
 <Manager className="org.apache.catalina.session.StandardManager" maxActiveSessions="-1" 
    maxInactiveInterval="60" pathname=""/>
</Context>
      通过Context元素的子元素Manager配置Session的管理对象:
className属性用于指定管理Session的类可以是StandarManager或PersitentManager。
maxActiveSessions表示允许最多活动Session对象的数目,-1表示不限制。
maxInactiveInterval表示Session默认的最长不活动间隔,单位为秒。
pathname表示StandarManager在服务器重启或应用重新加载时持久化Session对象的文件名,此处设置
为“”相当于关掉了Session的持久化机制。
  3.session的处理过程
      在Java Web Server(即Servlet/JSP Server)中,Session ID用jsessionid表示(请参见Servlet规范)。
  3.1 session请求
       HTTP Request一般由3部分组成:
    (1)Request Line
      这一行由HTTP Method(如GET或POST)、URL、和HTTP版本号组成。
例如,GET http://www.w3.org/pub/WWW/TheProject.html  HTTP/1.1
    (2)Request Headers
      这部分定义了一些重要的头部信息,如,浏览器的种类,语言,类型。Request Headers中还可以包括
Cookie的定义。
例如:
User-Agent:  Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; GTB6.4)
Accept-Language: en-us
Cookie: jsessionid=1001
     (3)Message Body
       如果HTTP Method是GET,那么Message Body为空。 如果HTTP Method是POST,说明这个HTTP Request
是submit一个HTML Form的结果, 那么Message Body为HTML Form里面定义的Input属性。例如,
user=guest
password=guest
jsessionid=aaaa
     注意,如果把HTML Form元素的Method属性改为GET。那么,Message Body为空,所有的Input属性都
会加在URL的后面。你在浏览器的URL地址栏中会看到这些属性,类似于
http://www.xxxx.com/login.do?user=guest&password=aaaa&jsessionid=1111111
    从理论上来说,这3个部分(Request URL,Cookie Header, Message Body)都可以用来存放Session ID。
由于Message Body方法必须需要一个包含Session ID的HTML Form,所以这种方法不通用。
 
      3.2 URL重写
      Session对象的正常使用要依赖于Cookie。如果考虑到客户端浏览器可能出于安全的考虑禁用了Cookie,应该
使用URL重写的方式使Session在客户端禁用Cookie的情况下继续生效。
      首先刷新一个页面,给这个页面定义一个名字,然后写入session并链接到下一级页面,在下一级页面访问的时候
通过response的encodeURL进行处理。也就是说下一级页面是获得上一级页面的session。
  
      4.Session对象的持久化
       session一般都存放在内存中,当服务器内存问题,或者服务器宕机时session就会丢失。有两种方法,一、将
session进行集群化,tomcat支持此功能。二、将session写入文件\数据库\共享内存中,方便在服务恢复是重新加载。
这就是session的持久化。 在java中session数据的序列化接口(java.io.Serializable)实现
       tomcat在进行同步的时候除了sessionid还于服务名和域名相关,所以对于大型网络即时将session保存到
memcached或者内存数据库、NFS等也会取到不同的session。
       如果tomcat前有负载工具也会造成获取失误,建议在负载设备上制定session的链接规则。
  
整理参考:
http://tech.it168.com/jd/2007-09-29/200709291005796_1.shtml
http://www.edutt.com/book-show-3B3B3B393F423A3C363B3E3D413A366B787874.html
http://virgos.javaeye.com/blog/221271

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-337485-1-1.html 上篇帖子: tomcat如何配置虚拟目录及虚拟主机 下篇帖子: Tomcat之Session和Cookie大揭密
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表