Cookie
什么是Cookie
Cookie 是服务器通知客户端保存键值对的一种技术。客户端有了 Cookie 后,每次请求都发送给服务器,每个 Cookie的大小不能超过4KB。
如何创建Cookie
//1 创建 Cookie 对象
Cookie cookie = new Cookie("key", "value");
//2 通知客户端保存
Cookie resp.addCookie(cookie); //不执行此行代码Cookie不会创建
服务器如何获取Cookie
req.getCookies(); //返回值是一个是一个Cookie数组(Cookie[])
获取具体的Cookie则需要遍历整个数组:
Cookie[] cookies = req.getCookies();
Cookie iwantCookie = null;
for (Cookie cookie : cookies) {
if(name.equals(name)){ //name为需要的Cookie的key值
iwantCookie = cookie;
}
}
Cookie值的修改
方案一
1、先创建一个要修改的同名(指的就是 key)的 Cookie 对象
2、在构造器,同时赋于新的 Cookie 值
Cookie cookie = new Cookie("key1","newValue1");
3、调用 response.addCookie( Cookie )
resp.addCookie(cookie);
方案二
1、先查找到需要修改的 Cookie 对象
Cookie cookie = CookieUtils.findCookie("key2", req.getCookies())
2、调用 setValue()方法赋于新的 Cookie 值。
if (cookie != null) {
cookie.setValue("newValue2");
3、调用 response.addCookie()通知客户端保存修改
resp.addCookie(cookie);
}
Cookie 生命控制
Cookie 的生命控制指的是如何管理 Cookie 什么时候被销毁。调用 SetMaxAge() 方法进行控制。
SetMaxAge():
正数:表示在指定的秒数后过期
负数:表示浏览器一关,Cookie 就会被删除(默认值是-1)
零:表示马上删除 Cookie
Cookie 有效路径 Path 的设置
Cookie 的 path 属性可以有效的过滤哪些 Cookie 可以发送给服务器。哪些不发。 path 属性是通过请求的地址来进行有效的过滤。(只要有就会过滤,不在乎是否完全一致即包含地址是所在的集合更小)
举例:
CookieA path=/工程路径
CookieB path=/工程路径/abc
请求地址如下:
htto://ip:port/工程路径/a.html
CookieA 发送 CookieB 不发送
htto://ip:port/工程路径/abc/a.html
CookieA 发送 CookieB 发送
设置:
通过setPath()方法设置: cookie.setPath( req.getContextPath() + "/abc")
Session
什么是 Session 会话
1、Session 就一个接口(HttpSession)。
2、Session 就是会话。它是用来维护一个客户端和服务器之间关联的一种技术。
3、每个客户端都有自己的一个 Session 会话。
4、Session 会话中,我们经常用来保存用户登录之后的信息。
如何创建 Session 和获取id 号,判断是否为新
创建:request.getSession() 第一次调用是:创建 Session 会话 之后调用都是:获取前面创建好的 Session 会话对象 。
获取ID号:每个会话都有一个身份证号。也就是 ID 值。而且这个 ID 是唯一的。 getId() 得到 Session 的会话 id 值
判断是否为新:isNew() 判断到底是否为新
Session 域数据的存储
跟其他存储域数据的对象一样,通过setAttribute()和getAttribute()方法进行存储,在此不做过多赘述
Session 生命周期控制
不同于Cookie,Session的生命控制是通过setMaxInactiveInterval(int interval) 控制的。此方法设置 Session 的超时时间(以秒为单位),超过指定的时长,Session 就会被销毁。
说明:
1.值为正数的时候,设定 Session 的超时时长。 负数表示永不超时。 2.getMaxInactiveInterval()获得Session的超时时间
3.Session方法采用invalidate()方法立即销毁Session对象(此点也不同与Cookie)