学习session机制
序:
网络服务的形式可以分为两大类:1)面向连接的服务2)无连接的服务;两者主要的不同在于客户端和服务器之间建立连接的机制不同。
对于面向连接的服务,在计算机开始通信之前,两台计算机必须通过网络建立连接,然后开始传输数据。待数据传输结束后,再撤销这个链接。从建立连接起服务器就已与客户端一直保持连接状态,因此这条通信链路在撤销连接之前就只有服务器与一个客户端在通信。这样服务器不需多次验证客户端的信息因为在第一次建立连接时服务器就已经验证并记住了该客户端的信息。
而对于无连接的服务,在计算机开始通信之前,并没有建立连接,客户端与服务器在完成一次信息传递之后就断开联系。这样就给我们造成了一个困难,当客户端想再次向服务器发送请求时,如何确定所建立的连接是来自同一个客户端呢?也许这样不好理解,那么就举一个例子吧:我们平常登录博客空间后,就获取了自己博客的首页信息,当我们再次点击其他信息链接向服务器进一步请求其它信息时,服务器只有知道你是那一个用户才能向你发送相应的数据,那么服务器如何识别请求是否是来自同一个用户呢?
解决方法有一下几种:
1)使用Cookies保存客户端的信息;
1隐私容易被窃取
2不占用服务器的资源,但大小有限制
2)使用包含额外参数(session ID)的URL(即URL重写)
1需要对所有动态生成的URL进行重写,代码比较繁琐。
2只能用于动态生成的文档如JSP和servlet,而不能用于Html文档。
3由于URL可见存在一定风险;
3)建立数据的隐藏表单字段(Hidden Form Field)
4)使用内建Session对象
下面详细学习一下session:
一、什么是Session?
英文中session指一段时间内的一连串动作消息等。而在此可理解为一段时间内客户端和服务器之间的一连串交互过程。客户端第一次连接上服务器时,服务器端就会生成一个Session对象(占用一定的存储空间)用来记录客户端的信息,每个session有一个唯一的SessionID,当服务器发送响应数据时session ID也会被传给客户端(Cookies功能未被禁止时保存在Cookies中,否则通过重写URL将其包含在URL中)。客户端下次再访问时,就带着从服务器带回的Session ID,服务器就根据Session ID来判断是那个客户端,并传送相应的服务信息。这样session就起到了会话追踪的作用。
注意点:浏览器关闭时、session在服务器端不会销毁而Cookies会被清空;
二、为什么要用Session?
相对而言,Session的安全性较高,因为其他方法保存的客户信息(如帐号、密码等)比较容易被窃取。另外使用
Session能够节约服务器资源,缓解服务器压力。因为当客户端无访问超过一定时间,服务器会自动销毁该客户端的Session,从而节省资源。
三、得到Session的两种方法及其区别?
1)request.getSession();
2)request.getSession(true);
3)request.getSession(false);
前两种方法,当session存在时直接获取已有的session,没有时新建一个;第三种有则取没则不新建;
四、存储Session ID的三个方法
1)保存在Cookies中
2)URL重写
3)隐藏表单字段
六、Session 存在时间的设置方法及其优先级?
1)在程序中设置:setMaxInactiveInterval(100)单位秒;
2)Tomcate中设置?
3)默认为30分钟
整理于2011.01.20