写点什么

Servlet 的 Cookie 和 Session 机制,面试谈谈对 springboot 的理解

用户头像
极客good
关注
发布于: 刚刚

Cookies 作用:会话保持,如完成用户的登录与状态保持


Cookies 的工作原理


  • 客户端向服务区发起登录请求

  • 服务器脚本(代码)向浏览器发送一组 Cookies,例如:姓名,年龄等

  • 浏览器将这些信息存储在本地计算机上,以备将来使用

  • 当下一次浏览器向 web 服务器发送任何请求时。浏览器会把这些 Cookies 信息发送到服务器,服务器将使用这些信息来识别账户

[](

)Cookies 构成


Cookies 通常设置在 HTTP 头信息中,设置 Cookie 的 http 请求,会向 Servlet 发送如下信息



  • Set-Cookie 头包含了一个名称值对,一个 GMT 日期,一个路径和一个域,名称和值都会被 URL 编码

  • expires 字段是一个命令,告诉浏览器在给定的时间和日期之后过去(“忘记”)该 Cookie

  • 如果浏览器被配置为存储 Cookies,他将会保留此信息知道到期日期


如果用户端的浏览器指向任何匹配该 Cookie 的路径和域的页面,他会重新发送 Cookie 到服务器,浏览器的头信息可能会如下:



此时 Servlet 就能够通过请求方法 request.getCookies()访问 Cookie,该方法将返回一个 Cookie 对象的数组

[](

)Servlet 操作 Cookie 方法


[](

)代码示例:


如果想要了解 IDEA 配置 Tomcat 运行 Servlet 项目,可点击


[IDEA 配置 Tomcat 运行 servlet 详解](


)


具体步骤,创建两个后端类,分别为:


  • 设置 cookie 信息

  • 获取 cookie 信息


设置 cookie 信息代码


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.io.PrintWriter;


public class SetCookieServlet extends HttpServlet {


@Override


protected void doGet(HttpServletRequest req, HttpServlet


【一线大厂Java面试题解析+核心总结学习笔记+最新架构讲解视频+实战项目源码讲义】
浏览器打开:qq.cn.hn/FTf 免费领取
复制代码


Response resp) throws ServletException, IOException {


//1.创建 Cookie 对象


//首先需要一个 cookie 对象,这里我们需要两个 cookie 对象,一个来存储用户名(username——java),一个来存储密码(pwd——javas)


Cookie username = new Cookie("uesrname","java");


Cookie pwd = new Cookie("pwd","javas");


//当我们创建好两个 cookie 对象之后,就可以对这两个对象进行一系列操作


//比如:设置他的过期时间,这里我们将 username 的过期时间设置为永久


username.setMaxAge(-1);


//密码 pwd 的过期时间设置为一分钟,注意他的过期时间是以秒为单位


pwd.setMaxAge(60);


//2.将 Cookie 对象关联到 response 上


resp.addCookie(username);


resp.addCookie(pwd);


//显示给用户部分的信息


resp.setCharacterEncoding("utf-8");


resp.setContentType("text/html");


//然后写入响应给客户端的内容


PrintWriter writer = resp.getWriter();


writer.println("<h1>Cookie 设置成功</h1>");


}


@Override


protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {


this.doGet(req, resp);


}


}


注意:一定不要忘记配置 web.xml 文件


结果验证:



获取 cookie 信息代码


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.io.PrintWriter;


public class GetCookieServlet extends HttpServlet {


@Override


protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {


//读取 Cookie 的信息


//因为客户端的 cookie 可能会有多个,所以我们使用数组来接收,注意:cookie 是从 request 获取的


Cookie[] cookies = req.getCookies();


resp.setContentType("text/html");


resp.setCharacterEncoding("utf-8");


PrintWriter writer = resp.getWriter();


//然后读取 cookie 的内容


for (Cookie item: cookies


) {


writer.println(String.format("<h1>Cookie key: %s,Cookie value: %s</h1>",item.getName(),item.getValue()));


}


}


@Override


protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {


this.doGet(req, resp);


}


}


注意


1.不要忘记配置 web.xml 文件


2.因为上面我们设置 cookie 信息的时候,pwd 的过期时间为一分钟,当我们要去获取 cookie 信息的时候就看时间不够,所以建议修改更长的过期时间。


验证结果

用户头像

极客good

关注

还未添加个人签名 2021.03.18 加入

还未添加个人简介

评论

发布
暂无评论
Servlet的Cookie和Session机制,面试谈谈对springboot的理解