Cookie 有什么用
思考问题 1-抛砖引玉
大家在访问某个网站的时候,是否能看到提示你上次登录网站的时间,而且要注意的是不同
用户上次登录的时间肯定是不一样的,这是怎么实现的?
思考问题2-抛砖引玉
大家在访问某个购物网站的时候,是否能看到提示你曾经浏览过的商品,不同用户浏览过 的商品肯定不一样,这是怎么实现的?
解决之道—cookie 技术
Cookie(小甜饼)是客户端技术,服务器把每个用户的数据以 cookie 的形式写给用户各自的浏 览器。当用户使用浏览器再去访问服务器中的 web 资源时,就会带着各自的数据去。这样, web 资源处理的就是用户各自的数据了。【简单示意图】
cookie 介绍
二说 cookie
- Cookie 是服务器在客户端保存用户的信息,比如登录名,浏览历史等, 就可以以 cookie 方式保存。
- Cookie 信息就像是小甜饼(cookie)一样,数据量并不大,服务器端在需要的时候可以从客户端浏览器读取,可以通过图来理解。
cookie可以用来做啥
- 保存上次登录时间等信息
- 保存用户名,密码, 在一定时间不用重新登录
- 网站的个性化,比如定制网站的服务,内容。
Cookie是保存在本地浏览器的!!!
cookie 基本使用
使用文档
https://docs.oracle.com/javaee/7/api/
cookie常用方法
-
Cookie 有点象一张表(K-V),分两列,一个是名字,一个是值,数据类型都是 String , 如图
-
如何创建一个 Cookie(在服务端创建的)
Cookie c = new Cookie(String name,String val);
c.setMaxAge();//保存时间
- 如何将一个 Cookie 添加到客户端
response.addCookie(c);
- 如何读取 cookie(在服务器端读取到 cookie 信息)
request.getCookies();
cookie 底层实现机制-创建和读取 Cookie
服务器端创建Cookie
package com.hspedu.cookie;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
import java.io.PrintWriter;
/**
* @ClassName CreateCookie
* @Description TODO
* @Author zephyr
* @Date 2022/12/18 22:37
* @Version 1.0
*/
@WebServlet(name = "CreateCookie", value = "/createCookie")
public class CreateCookie extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("==========CreateCookie被调用==========");
//1. 创建一个Cookie对象
/**
* 1) username 该cookie的名字,唯一的,可以理解成key
* 2) zephyr 该cookie的值
* 3) 可以创建多个cookie对象
* 4) 这是这个cookie在服务器端,还没有到浏览器
*/
Cookie cookie = new Cookie("username", "zephyr");
response.setContentType("text/html;charset=utf-8");
//2. 将cookie发送给浏览器,让浏览器将该cookie保存起来
response.addCookie(cookie);
PrintWriter writer = response.getWriter();
writer.println("<h1>创建cookie成功!<h1>");
writer.flush();
writer.close();
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
服务器端读取Cookie
package com.hspedu.cookie;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
/**
* @ClassName ReadCookies
* @Description 演示:读取从客户端发送来的cookie信息
* @Author zephyr
* @Date 2022/12/19 10:47
* @Version 1.0
*/
@WebServlet(name = "ReadCookies", value = "/readCookies")
public class ReadCookies extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("==========CreateCookie被调用==========");
//1. 通过Request对象读取所有Cookie信息
Cookie[] cookies = request.getCookies();
//2. 遍历Cookie
if (cookies != null && cookies.length