Session是会话,是用在服务端记录用户信息的数据结构。
Session的使用 1、获取Session对象HttpSession s = request.getSession(boolean flag);
2、常用方法注:HttpSession是一个接口。
当flag为true时,根据请求中的SessionId查找对应Session对象,不存在则返回新建Session对象。
当flag为false时,同样根据请求中的SessionId查找对应Session对象,不存在则返回null。
绑定数据:
session.setAttribute(String name,Object obj);
根据绑定名获得绑定值:
Object session.getAttribute(String name);
解除绑定:
session.removeAttribute(String name);
3、Session的自动销毁
Tomcat 服务器默认的Session超时时间是30分钟
可以利用web.xml设置超时时间单位是分钟,设置为0表示不销毁。
解决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可以被浏览器禁用。