DAY05-Cookie
会话的介绍
什么是会话
浏览器值服务器之间发生一系列请求和响应的过程
会话开始:开发浏览器–访问网页
会话结束:关闭浏览器
Cookie的概述
什么是cookie
Cookie是为了辨别用户身份,而存储在用户本地终端上的数据。
cookie数据存放在客户的浏览器上,
cookie的特点
- 数据是键值对的形式,
- cookie数据存于浏览器,需要通过request获取
Cookie[] cookies = request.getCookies();
通过循环遍历数据
cookie有存活时间,并可以修改,默认存活时间就是一个会话
cookie.setMaxAge(int expiry)//单位为秒
设置cookie
@WebServlet("/set")
public class Cookie01Servlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//创建Cookie
Cookie cookie = new Cookie("java","python");
//获取cookie中的值
String name = cookie.getName();
String value = cookie.getValue();
System.out.println(name +" "+ value);
//设置cookie的时长,单位为秒
cookie.setMaxAge(60*60);
//将cookie发送给浏览器
response.addCookie(cookie);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request,response);
}
}
获取cookie
@WebServlet("/get")
public class Cookie02Servlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//获取浏览器中的cookie
Cookie[] cookies = request.getCookies();
//遍历取出cookie
for (Cookie cookie : cookies){
String name = cookie.getName();
int maxAge = cookie.getMaxAge();
System.out.println(name +" " + maxAge);
}
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request,response);
}
}
Cookie的访问路径
设置cookie的路径—浏览器根据这个路径判断哪些cookie要发送给服务器
//方式1:/myweb/ 当访问项目下的所有资源,请求都会携带Cookie
//方式2:/myweb/abc 当访问项目下的abc下所有资源,请求都会携带Cookie
//方式3:/ 当访问服务器中所有资源,请求都会携带Cookie
//默认方式:/myweb/ 当访问项目下的所有资源,请求都会携带Cookie
cookie.setPath(String path);
清除Cookie
- setMaxAge(0)//设置时长为0
- 或者覆盖原来的值
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Cookie cookie = new Cookie("jack","1234");
Cookie cookie1 = new Cookie("rose","4321");
//清除cookie的两种方式
//第一种,将cookie时长设为0
cookie.setMaxAge(0);
cookie1.setMaxAge(0);
//第二种,覆盖原来的cookie,并将值设置为空
// cookie = new Cookie("jack","");
// cookie1 = new Cookie("rose","");
response.addCookie(cookie);
response.addCookie(cookie1);
}
cookie处理特殊字符
Cookie中不能处理特殊符号
编码:URLEncoder.encode(date,“UTF-8”)明文–密文
解码:URLDecoder.decode(date,“UTF-8”)密文–明文
编码
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//Cookie不能处理特殊字符,所以需要编码和解码来处理
String name = URLEncoder.encode("中国","utf-8");
String value = URLEncoder.encode("加油","utf-8");
Cookie cookie = new Cookie(name,value);
//将cookie添加到浏览器中
response.addCookie(cookie);
}
解码
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//获取到所有cookie
Cookie[] cookies = request.getCookies();
//遍历取出key--value
for (Cookie cookie : cookies){
//解码
String s = URLDecoder.decode(cookie.getName(), "utf-8");
String v = URLDecoder.decode(cookie.getValue(), "utf-8");
System.out.println(s +" "+ v);
}
}
cookie的执行流程
-
浏览器第一次访问Servlet,创建一个cookie对象
-
Servlet将生成的cookie发送到浏览器(Set-Cookie)
-
浏览器自动保存
-
第二次访问Servlet,浏览器自动将cookie数据获取(“Cookie”)在放在请求中