目录
一、Cookie
二、创建 Cookie
三、服务器获取 Cookie
四、修改Cookie值
1、方案一
2、方案二
五、浏览器查看 Cookie
1、谷歌浏览器查看 Cookie:
2、火狐浏览器查看 Cookie:
六、Cookie 生命控制
七、Cookie的path属性
一、Cookie
1、Cookie 是服务器通知客户端保存键值对的一种技术。
2、客户端有了 Cookie 后,每次请求都发送给服务器。
3、每个 Cookie 的大小不能超过 4kb
二、创建 Cookie
protected void createCookie(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//1、创建cookie对象
Cookie cookie = new Cookie("key1","value1");
//2、通知客户端保存cookie
resp.addCookie(cookie);
resp.getWriter().write("Cookie创建成功");
}
三、服务器获取 Cookie
服务器获取客户端的 Cookie :req.getCookies():Cookie[]
protected void getCookie(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
Cookie[] cookies = req.getCookies();
for(Cookie cookie:cookies){
// getName 方法返回Cookie的key值
// getValue 方法返回Cookie的value值
resp.getWriter().write("Cookie["+cookie.getName()+"="+cookie.getValue()+"]<br/>");
}
// 查找key1的cookie值
Cookie iWantCookie = CookieUtils.findCookie("key1",cookies);
//如果不等于null,说明找到了需要的cookie
if (iWantCookie != null) {
resp.getWriter().write("get到key1的cookie");
}
}
四、修改Cookie值
1、方案一
(1)创建一个需要修改的同名的Cookie对象
(2)在构造器中,同时赋予新的Cookie值
(3)调用response.addCookie(Cookie)通知客户端保存修改
2、方案二
(1)查找到需要修改的Cookie对象
(2)调用setCookie()方法赋予新的Cookie值
(3)调用response.addCookie(Cookie)通知客户端保存修改
protected void updateCookie(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//方案一
//1、创建一个需要修改的同名的Cookie对象
//2、在构造器中,同时赋予新的Cookie值
Cookie cookie = new Cookie("key1","newValue1");
//3、调用response.addCookie(Cookie)
resp.addCookie(cookie);
resp.getWriter().write("方案一、key1的cookie值修改成功!<br/>");
//方案二
//1、查找到需要修改的Cookie对象
Cookie cookie1 = CookieUtils.findCookie("key1",req.getCookies());
if(cookie1 != null){
//2、调用setCookie()方法赋予新的Cookie值
cookie1.setValue("renewvalue1");
//3、调用response.addCookie(Cookie)通知客户端保存修改
resp.addCookie(cookie1);
resp.getWriter().write("方案二、key1的cookie值修改成功!");
}
}
五、浏览器查看 Cookie
1、谷歌浏览器查看 Cookie:
2、火狐浏览器查看 Cookie:
六、Cookie 生命控制
Cookie 的生命控制指的是如何管理 Cookie 什么时候被销毁(删除)
setMaxAge()(设置cookie的最大生存时间,以秒为单位)
正值,表示在指定的秒数后过期,
负数,表示浏览器一关,Cookie 就会被删除 (默认值是-1)
零,表示马上删除 Cookie
protected void defaultLife(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
Cookie cookie = new Cookie("defalutLife","defalutLife");
//设置存活时间
cookie.setMaxAge(-1);
resp.addCookie(cookie);
}
protected void deleteNow(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//先找到需要删除的Cookie对象
Cookie cookie = CookieUtils.findCookie("defalutLife",req.getCookies());
if(cookie!=null){
//调用setMaxAge(0)
cookie.setMaxAge(0); // 0表示马上删除,不需要等待浏览器关闭
//调用response.addCookie(Cookie)
resp.addCookie(cookie);
resp.getWriter().write("defalutLife成功被删除");
}
}
protected void life3600(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
Cookie cookie = new Cookie("life3600","life3600");
cookie.setMaxAge(60*60); //设置Cookie一小时之后被删除
resp.addCookie(cookie);
resp.getWriter().write("成功创建一个一小时的cookie");
}
七、Cookie的path属性
Cookie 的 path 属性可以有效的过滤哪些 Cookie 可以发送给服务器,哪些不发。
path 属性是通过请求的地址来进行有效的过滤。
CookieA path=/工程路径
CookieB path=/工程路径/abc
请求地址如下:
http://ip:port/工程路径/a.html CookieA 发送 CookieB 不发送
http://ip:port/工程路径/abc/a.html CookieA 发送 CookieB 发送
protected void testPath(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
Cookie cookie = new Cookie("path1", "path1");
// getContextPath() ===>>>> 得到工程路径
cookie.setPath( req.getContextPath() + "/abc" ); // ===>>>> /工程路径/abc
resp.addCookie(cookie);
resp.getWriter().write("创建了一个带有 Path 路径的 Cookie");
}