Session的介绍

来源:互联网 发布:四会网络推广学校 编辑:程序博客网 时间:2024/06/10 06:14
 

1、Session的概念

使用Cookie和附加URL参数都可以将上次请求的状态信息传递到下一次请求中,但是如果传递的状态信息较多,将极大降低网络传输效率和增大服务器端程序处理的难度。

Session技术是一种会话状态保存在服务器端的技术,它可以比喻成是医生发给病人的病历卡和医院为每个病人保留的病历档案的结合方式。

客户端需要接收、记忆和回送Session的会话标示号,Session可以且通常是借助Cookie来传递会话标示号。

2、Session的跟踪会话机制

Servlet API规范中定义了一个HttpSession接口,HttpSession接口定义了各种管理和操作会话状态的方法。

HttpSession对象是保持会话状态信息的存储结构,一个客户端在WEB服务器端对应一个各自的HttpSession对象。

Web服务器并不会在客户端开始访问它时就创建HttpSession对象,只有客户端访问某个能与客户端开启会话的Servlet程序是,Web应用程序才会创建一个与该客户端对应的HttpSession对象。

Web服务器为HttpSession对象分配一个独一无二的会话标示号,然后在响应消息中将这个会话标示号传递给客户端。客户端需要记住会话标示号,并在后续的每次访问请求中都把这个会话标示号传送给Web服务器,Web服务器程序依据回传的会话标示号就知道这次请求的客户端发出的,从而选择与之对应的HttpSession对象。

3、Session的跟踪机制

Web应用程序创建与某个客户端对应的HttpSession对象后,只要没有超出一个限定的空闲时段,HttpSession对象就驻留在Web服务器内存之中,该客户端此后访问任意的servlet程序时,它们都使用与客户端对应的那个已存在的Httpsession对象。

HttpSession接口中专门定义了一个SetAttribute方法将对象存储到HttpSession对象中,还定义了一个getAttribute方法来检索存储在Httpsession对象中的对象,存储进Httpsession对象中的对象可以被属于同一个会话的各个请求的处理程序共享。

Session是实现网上商城的购物车的最佳方案,存储在某个客户Session中的一个集合对象就可充当给客户的一个购物车。

4、Session的超时管理

      Web服务器无法判断当前的客户端浏览器是否还会继续访问,也无法检测客户端浏览器是否关闭,所以,即使客户已经离开或关闭了浏览器,Web服务器还要保留与之对应的Httpsession对象。

随着时间的推移而不断增加新的访问客户端,Web服务器内存中将会因此积累起大量的不断不在使用的Httpsession对象,并将最终导致服务器内存耗尽。

Web服务器采用“超时限制”的办法来判断客户端是否还在继续访问,如果某个客户端在一定的时间之内没有发出后续请求,Web服务器则认为客户端已经停止了活动,结束与该客户端的会话并将与之对应的Httpsession对象变成垃圾。

如果客户端浏览器超时后再发出访问请求,Web服务器则认为这是一个新的会话开始,将为之创新的HttpSession对象和分配新的会话标示号。

会话的超时间隔可以在Web.xml文件中设置,其默认值由Servlet容器定义。

<session-config>

      <session-timeout>30</session-timeout>

</session-config>

5、HttpSession接口中的方法:

getId()方法

getCreationTime()方法

getLastAccessedTime()方法

setMaxInactiveInterval()方法

getMaxInactiveInterval()方法

isNew()方法

(*主如果客户端请求消息中返回了一个与Servlet程序当前获得的Httpsession对象的会话标识号相同的会话标示号,则认为这个Httpsession对象不是新建的。)

Invalidate()方法

getServletContext()方法

setAttribute()方法

getAttribute()方法

removeAttribute()方法

getAttribute()方法

HttpServletRequest接口中的Session方法

getSession()方法

      public HttpSession getSession(boolean create)

      public HttpSession getSession()

isRequestedSessionIdValid()方法

isRequestedSessionIdFromCookie()方法

isRequestedSessionIdFromURL()方法

6、利用Cookie实现Session跟踪

如果Web服务器处理某个访问请求是创建了新的Httpsession对象,它将把会话标识号作为一个Cookie项加入到响应消息中,通常情况下浏览器在随后发出的访问请求中又将会话标识号以Cookie的形式回传给Web服务器。

Web服务器端程序依据回传的会话标识号就知道以前已经为该客户端创建了Httpsession对象,不必要为该客户创建新的Httpsession对象,而是直接使用与该会话标识号匹配的HttpSession 对象,通过这种方式就实现了对同一个客户端的会话状态的跟踪。

7、利用URL重写实现Session跟踪

Servlet规范中引入了一种补充的会话管理机制,它允许不支持Cookie的浏览器也可以与WEB服务器保持连续的会话。这种补充机制要求在响应消息的实体内容中必须包含下一次请求的超链接,并将会话标识号作为超链接的URL地址的一个特殊参数。

将会话标识号以参数形式附加在超链接的URL地址后面的技术称为URL重写。如果在浏览器不支持Cookie或者关闭了Cookie功能的情况下,WEB服务器还要能够与浏览器实现有状态的会话,就必须对所有可能被客户端访问的请求路径(包括超链接、form表单的action属性设置和重定向的URL)进行URL重写。

HttpServletResponse接口中定义了两个用于完成URL重写方法:

ü   encodeURL方法

ü   encodeRedirectURL方法

 

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 孩子不听话家长应该怎么办 总是对生活无欲无求怎么办 三角梅花不够艳怎么办 写不出说课中的教学过程怎么办 ps保存类型错误怎么办 word忘点保存怎么办 上台讲ppt紧张怎么办 ppt用wps打不开怎么办 拉屎拉绿色的怎么办 初中课外知识弱怎么办 孩子做作业不会怎么办 孩子有阅读障碍怎么办 英语一点都不会怎么办? 孩子抄作文交怎么办 语文阅读题差怎么办 怎么办婚介所营业执照 说话速度太快怎么办 初二期末退步很大怎么办 word文档没了怎么办 荷叶的叶子枯萎怎么办 被领导冤枉了怎么办 考狱警视力不够怎么办 幼儿园小朋友说脏话怎么办 初中成绩差高中怎么办 初中孩子不学习怎么办 跟大学班长不好怎么办 初中毕业考不上高中怎么办 客人要求加床怎么办 发现浓烟或明火怎么办 被误会谈恋爱要怎么办 小学作文不会写怎么办 高考档案丢了怎么办 考生档案丢了怎么办 对待不认识的人怎么办 妈妈头发白了怎么办 身无分文欠20万怎么办 心事太重睡不着怎么办 苹果手机存储空间不足怎么办 吉他旋钮滑丝怎么办 孩子爱发脾气父母怎么办 杏树卷叶枯萎怎么办