Session和Cookie的主要区别
**1. Cookie:
- 保存在浏览器的文件中
- 键和值都是字符串类型
- Session
- 保存在服务器的内存中
- 值可以是Object 类型**
如何查看Cookie的数据
如何在不同的浏览器中查看Cookie的信息
Cookie的引入
- 疑问:常见的网站登录,保存密码,下次自动登录如何实现?用户的数据应该保存到哪里?
- 用户名和密码保存在浏览器端的Cookie中
- 下次登录的时候读取Cookie中数据,发送给服务器
- 服务器会验证用户名和密码,如果正确,则完成自动登录。
如何查看Cookie信息
注:不同的浏览器Cookie保存的格式是不同的,而且相互之间不能共享
在Chrome中
Cookie本质上是一个键值对,键和值都是字符串类型。
Cookie的执行原理
- 什么是Cookie
- Cookie的执行原理
什么是Cookie
特点:本质上键值对,一个Cookie对象只能保存一对键和值,键和值都是字符串类型。
大小:所有的Cookie大小不能超过4K
Cookie运行的原理
访问流程
1. 浏览器第1次访问服务器,没有Cookie。由服务器创建Cookie对象
2. 以响应头Set-Cookie发送给浏览器
3. 浏览器接收到Cookie的信息,将Cookie保存到本地硬盘上。
4. 下次访问的时候,再读取本地Cookie信息发送给服务器,服务器就可以接收到Cookie的信息。
小结
Cookie的数据结构是什么样的?
键值对,键和值都是字符串类型
Cookie的创建和写入
- 如何创建Cookie
- 如何将创建的Cookie写入到浏览器端
创建和写入的方法
创建Cookie的案例演示
需求:
在Servlet中创建一个Cookie(“user”,“NewBoy”),并且写到浏览器端去。
运行效果
步骤
- 使用构造方法创建Cookie对象
- 使用响应对象的方法将创建好的Cookie写入到浏览器端
- 使用Chrome浏览器查看发送到浏览器的Cookie数据
- 也可以在响应头中查看有没有Set-Cookie响应头
代码
package com.itheima.servlet;
import javax.servlet.ServletException;
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;
import java.io.IOException;
import java.io.PrintWriter;
/**
Cookie的创建和写入
*/
@WebServlet(name = "Demo1CookieServlet", urlPatterns = "/demo1")
public class Demo1CookieServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//创建Cookie对象,提供键和值
Cookie man = new Cookie("user", "NewBoy");
//通过响应对象写入到浏览器端
response.addCookie(man);
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
out.print("向浏览器写入了一个Cookie");
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
}
查询响应头
设置Cookie过期的时间
如何设置Cookie的过期时间
设置Cookie过期时间的方法
案例:设置Cookie的过期时间
需求:
在写入Cookie之前先设置Cookie过期的时间,设置为10分钟以后过期
效果
步骤
- 创建Cookie
- 设置Cookie过期的时间,单位是秒
- 写入到浏览器端
代码
package com.itheima.servlet;
import javax.servlet.ServletException;
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;
import java.io.IOException;
import java.io.PrintWriter;
/**
Cookie的创建和写入
*/
@WebServlet(name = "Demo1CookieServlet", urlPatterns = "/demo1")
public class Demo1CookieServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//创建Cookie对象,提供键和值
Cookie man = new Cookie("user", "NewBoy");
//在写入之前设置过期的时间,单位是秒
man.setMaxAge(60 * 10); //10分钟
//通过响应对象写入到浏览器端
response.addCookie(man);
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
out.print("向浏览器写入了一个Cookie");
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
}
查询响应头和浏览器的信息
读取Cookie的信息
目标
如何从浏览器读取Cookie的信息到服务器
读取Cookie的方法
演示案例
需求
- 修改写入的Servlet,创建两个Cookie
- 创建Servlet读取所有Cookie信息,显示在浏览器上。
步骤
- 调用request.getCookies()返回一个Cookie对象数组
- 如果数组为null,打印没有读取到Cookie
- 如果不为空,则遍历每个Cookie对象:getName() getValue()
代码
package com.itheima.servlet;
import javax.servlet.ServletException;
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;
import java.io.IOException;
import java.io.PrintWriter;
@WebServlet(name = "Demo3ReadServlet", urlPatterns = "/demo3")
public class Demo3ReadServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
//1. 调用request.getCookies()返回一个Cookie对象数组
Cookie[] cookies = request.getCookies();
//2. 如果数组为null,打印没有读取到Cookie
if (cookies==null) {
out.print("没有读取到Cookie的信息");
}
//3. 如果不为空,则遍历每个Cookie对象:getName() getValue()
else {
for (Cookie cookie : cookies) {
out