image.png
一、Cookie
(1)Cookie 基本使用
image.png
发送 cookie
package com.test.web;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
// 发送cookie demo
@WebServlet("/servletSetCookie")
public class ServletSetCookie extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp){
// 创建cookie对象
Cookie cookie = new Cookie("myCookie", "123123");
// 发送cookie
resp.addCookie(cookie);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp){
this.doGet(req, resp);
}
}
获取cookie
package com.test.web;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
// 获取 cookie demo
@WebServlet("/servletGetCookie")
public class ServletGetCookie extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp){
Cookie[] cookies = req.getCookies();
for (Cookie cookie : cookies) {
String name = cookie.getName();
if (name.equals("myCookie")) {
System.out.println("成功获取到之前设置的cookie " + name + ":" + cookie.getValue());
break;
}
}
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp){
this.doGet(req, resp);
}
}
(2)Cookie 原理
image.png
设置cookie:后端服务通过 set-cookie:username=zs 响应头来告知浏览器创建一个名为username,值为zs的 cookie
获取cookie:后端服务接收这次请求时,在请求头 cookie 里面获取的所有cookie
(3)Cookie 细节
image.png
二、Session
(1)Session 基本使用
image.png
存储 Session
package com.test.web.session;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;
@WebServlet("/servletSetSession")
public class ServletSetSession extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp){
// 获取session对象
HttpSession session = req.getSession();
// 设置session
session.setAttribute("username", "张三");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp){
this.doGet(req, resp);
}
}
获取 Session
package com.test.web.session;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
@WebServlet("/servletGetSession")
public class ServletGetSession extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp){
// 获取session对象
HttpSession session = req.getSession();
Object username = session.getAttribute("username");
System.out.println("成功获取存储的 username:" + username);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp){
this.doGet(req, resp);
}
}
(2)Session 原理
Session 是基于Cookie实现的,服务器会给客户端存储一个 sessionid 的 cookie,浏览器每次请求的时候会自动带上这个 sessionid 用于区分。
image.png
(3)Session 细节
image.png
image.png
三、Cookie和Session的区别
image.png
参考:黑马java教程