Cookie
什么是Cookie
- Cookie是服务器通知客户端保存键值对的一种技术
- 客户端有了Cookie后,每次请求都发送给服务器
一个网站,怎么证明你来过?
客户端 服务端
- 服务端给客户端一个信件,客户端下次访问服务端带上信件就可以了; cookie
- 服务器登记你来过了,下次你来的时候我来匹配你; seesion
cookies = req.getcookies();//获得cookie
cookie.getName();//获得cookie中的key
cookie.getvalue();//获得cookie中的vlaue
new cookie("lastLoginTime",system.currentTimeMi11is()+"");//新建一个cookie
cookie.setMaxAge(24*60*60);//设置cookie的有效期 默认值是负一(即表示浏览器一关,就销毁cookie)
resp.addcookie(cookie);//响应给客户端一个cookie
//cookie的path属性
Cookie cookie = new Cookie("path1","path1");
cookie.setPath(req.getContextPath()+"/abc");
//也就是访问路径必须要有/abc才会创建这个cookie
代码演示
CookieDemo01
package com.tian.servlet;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Date;
public class CookieDemo01 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//简单解决中文乱码
req.setCharacterEncoding("UTF-8");
resp.setContentType("text/html;charset=UTF-8");
Cookie[] cookies = req.getCookies();//这里返回数组,说明cookie可能存在多个
//判断cookie是否存在
if(cookies!=null){
//如果存在怎么办
resp.getWriter().write("你上一次访问的时间是:");
for (int i = 0; i < cookies.length; i++) {
Cookie cookie=cookies[i];
//获取cookie的名字
if(cookie.getName().equals("lastLoginTime")){
long lastLoginTime = Long.parseLong(cookie.getValue());
Date date = new Date(lastLoginTime);
resp.getWriter().write(date.toLocaleString());
}
}
}else {
resp.getWriter().write("这是你第一次访问本站");
}
//服务器给客户端响应一个cookie
Cookie cookie = new Cookie("lastLoginTime",System.currentTimeMillis()+"");
//添加cookie有效期 一天
cookie.setMaxAge(24*60*60);
//添加一个cookie
resp.addCookie(cookie);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
CookieDemo02
//各种导包为了简洁我删掉了
public class CookieDemo02 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
Cookie cookie = new Cookie("lastLoginTime",System.currentTimeMillis()+"");
cookie.setMaxAge(0);
resp.addCookie(cookie);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
CookieDemo03
package com.tian.servlet;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.util.Date;
//中文数据传递
public class CookieDemo03 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//简单解决中文乱码
req.setCharacterEncoding("UTF-8");
resp.setContentType("text/html;charset=UTF-8");
Cookie[] cookies = req.getCookies();//这里返回数组,说明cookie可能存在多个
//判断cookie是否存在
if(cookies!=null){
//如果存在怎么办
resp.getWriter().write("你上一次访问的时间是:");
for (int i = 0; i < cookies.length; i++) {
Cookie cookie=cookies[i];
//获取cookie的名字
if(cookie.getName().equals("name")){
//解码
System.out.println(URLDecoder.decode(cookie.getValue(),"UTF-8"));
}
}
}else {
resp.getWriter().write("这是你第一次访问本站");
}
//编码
Cookie cookie = new Cookie("name", URLEncoder.encode("张三","UTF-8"));
resp.addCookie(cookie);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
配置web.xml,访问,按 f12 看application 里的cookies
一个网站cookie是否存在上限!聊聊细节问题。
-
一个Cookie只能保存一个信息;
-
一个web站点可以给浏览器发送多个cookie,最多存放20个cookie;.
-
Cookie大小有限制4kb;
-
300个cookie浏览器上限
删除Cookie;
- 不设置有效期,关闭浏览器,自动失效;
- 设置有效期时间为0;
编码解码
- URLEncoder.encode(“张三”,“utf-8”)
- URLDecoder.decode(cookie.getvalue( ),“UTF-8"”)