session的使用

来源:互联网 发布:maven 指定java版本 编辑:程序博客网 时间:2024/06/03 17:44
Session
=====================================================================
1.简介
------------------------------------------------------------
Session代表服务器与浏览器的一次会话过程.数据保存在服务器端

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

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

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

cookie中session的标识是JSESSIONID


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里放。


session是在调用HttpServletRequest.getSession(true)语句时才创建session对象

Cookie与Session的区别

  1. cookie数据存放在客户的浏览器上,session数据放在服务器上;
  2. cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗,考虑到安全应当使用session;
  3. session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能。考虑到减轻服务器性能方面,应当使用COOKIE;
  4. 单个cookie在客户端的限制是3K,就是说一个站点在客户端存放的COOKIE不能超过3K;

Cookie和Session的方案虽然分别属于客户端和服务端,但是服务端的session的实现对客户端的cookie有依赖关系的,上面我讲到服务端执行session机制时候会生成session的id值,这个id值会发送给客户端,客户端每次请求都会把这个id值放到http请求的头部发送给服务端,而这个id值在客户端会保存下来,保存的容器就是cookie。




0 0