DAY3
前言
一、什么是Cookie?
HTTP协议本身是无状态的。什么是无状态呢,即服务器无法判断用户身份。Cookie实际上是一小段的文本信息(key-value格式)。客户端向服务器发起请求,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个Cookie。客户端浏览器会把Cookie保存起来。当浏览器再请求该网站时,浏览器把请求的网址连同该Cookie一同提交给服务器。服务器检查该Cookie,以此来辨认用户状态。
Cookie是一个运用在浏览器端的一种缓存技术,是可以存储某一次请求的数据并且在在另外某一时刻再一次发送给浏览器。
二、使用步骤
1.如何使用Cookie?
这个图片很好的表示了cookie是如何运行的,在第一次由client(Browser)发出请求,然后服务器响应该请求并且当前响应是含有一个set-cookie的头,然后当前client保存该cookie后再在下一次发送请求时发给服务器,服务器响应对应的数据
2.Cookie内容编写
Cookie的内容可以分为两个过程,一个是对于cookie的设置,这个是我们程序员自己设定完成的,另外一个就是getcookie,
1.代码如下(setcookie):
package gy;
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;
/**
* created by Farewell on 2021/6/20
*/
//Cookie学习
//创建Cookie对象
//Cookie c = new Cookie("mouse","thinkpad");
//注意:一个cookie对象存储一条数据
//响应Cookie对象给客户端,浏览器端的存储数据,然而他的数据存储是在服务器端实现
//Cookie的获取:
//获取Cookie信息数组
//Cookie[] c = req.getCookies()
//遍历数组前判断该请求是否为空
//if(c!=null) next--->
//遍历该数组
public class CookieServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("utf-8");
resp.setContentType("text/html;charset=utf-8");
//使用cookie进行浏览器端的数据存储
//创建数据对象
Cookie c = new Cookie("mouse","thinkpad");
Cookie c1 = new Cookie("gy","yy");
//响应Cookie信息
c1.setMaxAge(3*24*3600);
//设置有效路径
c1.setPath("/Cookie/gc");
resp.addCookie(c);
resp.addCookie(c1);
resp.getWriter().write("Cookie学习");
//两种存储方式:
//1.临时存储:只存储在他的运行期间之内存储在浏览器的运行内存中(因为再关闭浏览器之后就会发现临时存储的cookie是不存在的,所以可以得出该结论)
//2.定时存储:设置有效时间内,在有效期内符合要求的请求都可以附带该信息,存储在客户端的硬盘中(设置一定时间内都会有效)
//默认cookie信息存储好了之后,每次请求都会附带除非设置有效路径(清楚浏览器的历史记录可以清除定时的cookie)
}
}
2.代码如下(getcookie):
package gy;
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;
/**
* created by Farewell on 2021/6/20
*/
public class GetCookieServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("utf-8");
resp.setContentType("text/html:charset=utf-8");
//获取cookie信息
Cookie[] ck = req.getCookies();
for(Cookie c:ck){
String name = c.getName();
String value = c.getValue();
System.out.println(name+" "+value);
}
}
}
由以上代码中我们不难看出cookie的内容设置几大步骤:
//创建Cookie对象
//Cookie c = new Cookie("mouse","thinkpad");
//注意:一个cookie对象存储一条数据
//响应Cookie对象给客户端,浏览器端的存储数据,然而他的数据存储是在服务器端实现
//Cookie的获取:
//获取Cookie信息数组
//Cookie[] c = req.getCookies()
//遍历数组前判断该请求是否为空
//if(c!=null) next--->
//遍历该数组
最后注意cookie的不同存储方式:
//两种存储方式:
//1.临时存储:只存储在他的运行期间之内存储在浏览器的运行内存中(因为再关闭浏览器之后就会发现临时存储的cookie是不存在的,所以可以得出该结论)
//2.定时存储:设置有效时间内,在有效期内符合要求的请求都可以附带该信息,存储在客户端的硬盘中(设置一定时间内都会有效)
//默认cookie信息存储好了之后,每次请求都会附带除非设置有效路径(清楚浏览器的历史记录可以清除定时的cookie)