session

来源:互联网 发布:温湿度数据采集系统 编辑:程序博客网 时间:2024/05/15 23:51

Session
=========================================================================================
1.简介
------------------------------------------------------------
Session代表服务器与浏览器的一次会话过程.

初次访问服务器上的一个jsp,服务器在响应头中设置了临时cookie(会话级,关闭浏览器就消失),并加上了一JSESSIONID
第二次访问jsp,浏览器将存储JSESSIONID的cookie随着请求一起发送到服务器,
服务器通过JSESSIONID到内存中找到上次生成的session对象,

从而实现客户端(浏览器)共享session。

(服务器设置的临时cookie:JSESSIONID是会话级的,关闭浏览器就消失,再打开浏览器访问时,

JSESSIONID为空,所以服务器会重新生成一个JSESSIONID,这就是session是会话级别的)


JSESSIONID也可以拼在url上,如:
http:///localhost:8080/testApp/test.jsp;JSESSIONID=XX?param1=value1,
JSESSIONID可以通过request.getSession().getId()得到,url中如果有JSESSIONID,服务器就不会从cookie中取了。

2.session的创建
------------------------------------------------------------
session是服务器创建的对象,放在服务器内存中;

以Tomcat为例,当使用浏览器访问一个jsp时,Tomcat会先根据jsp生成java文件,再编译成class,
最后运行,输出内容到浏览器,浏览器解析呈现给用户。
java和class文件会放到<Tomcat安装目录>/work/Catalina/localhost/<你的应用>/org/apache/jsp/<相应包>下,
比如你有个test.jsp,那么就会生成test_jsp.java文件。打开test_jsp.java,找到其_jspService方法,
会看到声明了一些我们常说的jsp内置对象。
PageContext pageContext = null;
HttpSession session = null;
ServletContext application = null;
JspWriter out = null;
再往下看,会看到有一句session = pageContext.getSession();
这里生成了session对象,也就是说,访问jsp时,服务器自动生成了session对象
(可以在jsp的page声明中加入session="false",禁用session)。

3.session的销毁
------------------------------------------------------------
session销毁:
1)服务器被强制关闭,肯定啥都没有了,这要看服务器具体的实现,像Tomcat正常关闭(使用shutdown)的话,
是会对session序列化到硬盘上的,重新启动后,会读取,原有的session依然存在。
2)程序中调用session.invalidate(),销毁当前session方法。
3)session超时(失效),超时指的是服务器连续一段时间内(超出了应用中设置的最低时限)没有接收到session所在客户端的请求,
  服务器从内存中移除该session对象。

在系统登录后,都会设置一个当前session失效的时间,以确保在用户长时间不与服务器交互,自动退出登录,销毁session。
设置session失效的几种方法:
1)在主页面或者公共页面中加入:session.setMaxInactiveInterval(900);参数900单位是秒,即在没有活动15分钟后,session将失效。
2)也是比较通用的设置session失效时间的方法,就是在项目的web.xml中设置
 <!-- 设置session失效,单位分 -->
 <session-config>
  <session-timeout>6</session-timeout>
 </session-config>
3)直接在应用服务器中设置,如果是tomcat,可以在tomcat目录下conf/web.xml中找到<session-config>元素,
   tomcat默认设置是30分钟,只要修改这个值就可以了。
   优先级1 > 2 > 3

浏览器窗口关闭,session会消失吗?
session的创建和销毁由服务器端控制
浏览器关闭后,没有请求再访问(通过JSESSIONID查找)服务器内存中的该session了,超过设置的失效时间,服务器会自动销毁该session.

jsp页面可以添加 <%@ page session="false"%>
不是不让页面创建Session,而是在此JSP页面无法使用session.

session是消耗服务器内存的,所以要合理使用session,不要什么东西都往session里放。

参考:http://blog.csdn.net/ghsau/article/details/13023425

0 0
原创粉丝点击