java web 40 : Cookie、Session
一、会话概述
1、什么是会话?
会话:是指浏览器和服务器之间产生的多次请求以及响应加在一起,就称之为浏览器和服务器之间的一次会话。
会话开始于,浏览器第一次访问服务器。
会话结束于,浏览器最后一次访问服务器,并且浏览器关闭为止。
2、如何保存会话中产生的数据?
在一次会话中往往会产生一些数据,如何来保存这些数据?
可以使用cookie或者session来保存会话中产生的数据。
二、Cookie的原理和应用
1、cookie的工作原理
参考讲义中的《cookie工作原理图》
2、cookie的API
(1)创建cookie对象
cookie cookie = new Cookie(String name,String value);
(2)将cookie添加到响应中
response.addCookie( cookie );
(3)在服务器端获取请求中的所有cookie组成的数组
Cookie[] cs = request.getCookies();
如果请求中没有任何cookie,该方法会返回null;
如果请求中有一个或一个以上的cookie,该方法就会返回cookie对象数组
(4)删除浏览器内部的cookie
由于浏览器是根据cookie的名字来区分一个cookie,因此要删除一个cookie,可以向
浏览器再发送一个同名的cookie,并且指定cookie生存时间为零,将这个cookie发送
给浏览器,浏览器收到后,会先将之前的cookie覆盖掉,再删除当前这个cookie.
(5)cookie的常用方法
cookie.getName() -- 获取cookie的名字
cookie.getValue() -- 获取cookie中的保存的数据
cookie.setValue() -- 设置/修改cookie保存的数据
(6)cookie.setMaxAge()方法 -- 设置cookie的最大生存时间.
如果不设置该方法,cookie默认是会话级别的cookie,当浏览器关闭,随着内存的释放
(cookie默认存放在浏览器的内存中),cookie会跟着销毁!
如果设置了该方法(设置的是正值),cookie就不会再存到浏览器的内存中,而是以文件
形式保存在浏览器的临时文件夹中,即使浏览器关闭,内存释放,cookie也不会销毁.
下次打开浏览器,还可以获取硬盘上文件中的cookie信息.
三、session的原理和应用
1、session的工作原理
参考讲义中《session的工作原理图》
2、session是一个域对象
通过如下方法可以获取session:
(1)request.getSession()
request.getSession(true)
-- 表示如果在服务器内部有当前浏览器对应的session,就会直接返回该session对象;
-- 如果服务器内部没有当前浏览器对应的session,就会创建一个session并返回;
(2)request.getSession(false)
-- 表示如果在服务器内部有当前浏览器对应的session,就会直接返回该session对象;
-- 如果服务器内部没有当前浏览器对应的session,就会返回null值;
session中提供的存取数据的方法:
(1)session.setAttribute(String attrName, Object attrValue);
-- 往session域中添加一个域属性,属性名只能是字符串类型,属性值可以是任意类型。
(2)session.getAttribute(String attrName);
-- 根据属性名获取域中的属性值,返回值是一个Object类型