㈠ 什么是session?
session是一种服务器端的状态管理技术。
当浏览器访问服务器时,服务器会创建一个session对象(该对象有一个id属性,其值是唯一的,一般称之为sessionId),服务器在默认情况下,会使用cookie机制(将sessionId放到set-cookie消息头)将这个sessionId发送给浏览器;当浏览器再次访问服务器时,会将sessionId发送给服务器,服务器依据sessionId找到之前的session对象。
㈡ 如何获得一个session对象
方式一: HttpSession s = request.getSession(boolean flag);
① 当flag = true时
先查看请求当中是否有sessionId,如果没有,则创建一个符合HttpSession接口要求的对象(即session对象);如果请求当中有sessionId,则依据sessionId查找对应的session对象是否存在,如果存在,则返回该session对象;如果不存在,则创建一个新的session对象。
② 当flag = false时
先查看请求当中是否有sessionId,如果没有,返回null;如果请求当中有sessionId,则依据sessionId查找对应的session对象是否存在,如果存在,则返回该session对象;如果不存在,返回null。
方式二:HttpSession s = request.getSession();该方法等价于request.getSession(true)。
㈢ session对象常用的方法
String session.getId(); //获得sessionId
session.setAttribute(String name, Object obj); //绑订数据
Object session.getAttribute(String name);//依据绑订名称获得绑订值,如果绑订值不存在,返回null。
session.removeAttribute(String name);//解除绑订
㈣ session的超时
① 什么是session的超时
服务器会将空闲时间过长的session对象删除掉。一般的服务器,默认的空闲时间是30分钟。
② 修改服务器缺省的session的超时限制
⑴ 修改Tomcat的conf/web.xml
<session-config>
<session-timeout>30</session-timeout>
</session-config>
⑵ 某个web应用对应的web.xml文件里面,此时,只对该web应用有效。
⑶ setMaxInactiveInterval(int seconds);单位是秒
㈤ 立即删除session对象
session.invalidate();
㈥ session案例: session验证,常用于登录
step1, 在登录成功以后,在session对象上绑订一些数据。
比如:session.setAttribute("user",user);
step2,对于需要保护的资源(需要登录成功以后,才能访问的地址,比如main.jsp),添加session验证的代码。
比如: Object obj = session.getAttribute("user");
if(obj == null){
response.sendRedirct("login.jsp");
}
㈦ session的优点与缺点(相对于cookie技术)
优点:
① 安全: session将数据保存在服务器端
② 保存的数据更多。
③ 保存的数据类型更丰富。
缺点:
session会将状态保存在服务器端,会占用服务器大量的内存空间。
cookie会将状态保存在客户端(浏览器),服务器不会保存任何状态。