Session是会话,是用在服务端记录用户信息的数据结构。
Session的使用
1、获取Session对象
HttpSession s = request.getSession(boolean flag);
注:HttpSession是一个接口。
当flag为true时,根据请求中的SessionId查找对应Session对象,不存在则返回新建Session对象。
当flag为false时,同样根据请求中的SessionId查找对应Session对象,不存在则返回null。
2、常用方法
绑定数据:
session.setAttribute(String name,Object obj);
根据绑定名获得绑定值:
Object session.getAttribute(String name);
解除绑定:
session.removeAttribute(String name);
3、Session的自动销毁
<session-config> <session-timeout>20</session-timeout> </session-config>
Session 与 Cookie 的区别
解决HTTP协议自身无状态的方式有cookie和session。二者都能记录状态,前者是将状态数据保存在客户端,后者则保存在服务端。
Session的工作原理
session的基本原理是服务端为每一个session维护一份会话信息数据,而客户端和服务端依靠一个全局唯一的标识来访问会话信息数据。用户访问web应用时,服务端程序决定何时创建session,创建session可以概括为三个步骤:
1、生成全局唯一标识符(sessionid);
2、开辟数据存储空间。一般会在内存中创建相应的数据结构,但这种情况下,系统一旦掉电,所有的会话数据就会丢失,如果是电子商务网站,这种事故会造成严重的后果。不过也可以写到文件里甚至存储在数据库中,这样虽然会增加I/O开销,但session可以实现某种程度的持久化,而且更有利于session的共享;
3、将session的全局唯一标示符发送给客户端。
Cookie的工作原理
无论使用何种服务端技术,只要发送回的HTTP响应中包含如下形式的头,则视为服务器要求设置一个cookie:
Set-cookie:name=name;expires=date;path=path;domain=domain
支持cookie的浏览器都会对此作出反应,即创建cookie文件并保存(也可能是内存cookie),用户以后在每次发出请求时,浏览器都要判断当前所有的cookie中有没有没失效(根据expires属性判断)并且匹配了path属性的cookie信息,如果有的话,会以下面的形式加入到请求头中发回服务端:
Cookie: name=“zj”; Path="/linkage"
服务端的动态脚本会对其进行分析,并做出相应的处理,当然也可以选择直接忽略。
需要注意的是,出于安全性的考虑,cookie可以被浏览器禁用。
|