1、Cookie和Session
(1)Cookie简介
- 定义:由服务端生成,用于标记客户端的唯一标识,每次在网络请求中,都会被传送;
- cookie属性
属性 | 描述 | 范例 |
---|---|---|
Name | 名称 | BDORZ |
Value | 值 | B490B5EBF6F3CD402E515D22BCDA1598 |
Domain | 表示当前cookie所属于那个域下 | .baidu.com |
Path | 当前cookie所属路径 | / |
Expires/Max-age | cookie有效期 | 2022-01-29T11:59:41.000Z |
size | 大小限制 | 37 |
http-only | cookie不能被客户端使用js读取到,是不公开的cookie | |
Secure | 标记为Secure的Cookie只能够通过https协议加密过的请求给服务端 |
- 范例1:以CSDN的页面为例
- 2范例2:JS获取Cookie
document.cookie
(2)Session简介
- 定义:服务端自己维护的一个map数据结构,记录key-Object上下文内容;
(3)Cookie和Session生成
①浏览器发送request请求到服务器,服务器处了返回请求的response之外,还给请求分配一个唯一标识ID和response给浏览器;
②服务器在本地创建一个map结构,专门以key-value存储这个ID标识和浏览器的关系;
③当浏览器的第一次请求后已经分配一个ID,当第二次访问时会自动带上这个标识ID,服务器会获取这个标识ID去map里面招上一次request的信息状态并做对应的更新操作。
cookie:服务端生成的全部唯一标识,传递给客户端用于标记这次请求
session:服务器创建的那个map结构
总而言之:session是存在服务器,session依赖于cookie,cookie里面存储的就是JSESSIONID
2、Cookie开发实战
获取请求Cookie:Cookie[] cookies = req.getCookies()
返回响应Cookie: Cookie cookie = new Cookie("token","sfwerawefewadaewfafewafa");
(1)范例一
- 业务场景:获取请求的cookie
@WebServlet("/get_cookie_test")
public class CookieServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
Cookie[] cookies = req.getCookies();
for( Cookie cookie: cookies){
cookie.getDomain();
}
}
}
Ⅰ、进行断点调试,首次生成Cookie:点击右上角的debug(小虫标志),之后在浏览器中输入http://localhost:8080/cookie_test
Ⅱ、查看页面:生成SessionID
Ⅲ、查看输出结果
(2)范例二
- 业务场景:获取返回的cookie
@WebServlet("/gene_cookie_test")
public class GeneCookieServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Cookie cookie = new Cookie("token","sfwerawefewadaewfafewafa");
//20秒过期时间,过期后不会自动携带过去
cookie.setMaxAge(20);
response.addCookie(cookie);
request.getRequestDispatcher("/index.jsp").forward(request,response);
}
}
- 运行结果
3、Session开发实战
(1)范例一
@WebServlet("/session_servlet")
public class SessionServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
HttpSession session = request.getSession();
//获取sessionid,java里面叫jsessionid
System.out.println("sessionid="+session.getId());
//创建时间戳,毫秒
System.out.println("getCreationTime="+session.getCreationTime());
//是否是初次创建,记得情况浏览器的cookie,验证sessionid
System.out.println("isNew="+session.isNew());
//往session存储东西
session.setAttribute("name","卷");
}
}
- 首次访问运行结果
- 第二次访问运行结果