注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

simonzhang个人观点

http://www.simonzhang.net 镜像地址

 
 
 

日志

 
 

Session处理方面的知识总结  

2011-01-20 11:18:51|  分类: WEB系统 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

     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

  评论这张
 
阅读(368)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017