cookie的使用机制

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/fangxinde/article/details/82350364

cookie使用场景:

当不同的用户访问同一家网站时(采用相同的请求地址),服务器如何区分不同用户的请求操作呢?需要浏览器对发出的每个请求进行标识。属于同一个会话的请求,都带有相同的标识,不同的会话带有不同的标识。

cookie的使用的底层原理:

客户端(浏览器)访问web服务器时(jsp文件),服务器通过Cookie构造器构造一个Cookie实类。然后由web服务器在HTTP响应消息头中附带Cookie实类至客户端,并保存到客户端内存中。在cookie生命周期内,以后每次请求都携带cookie

服务端构建一个cookie生成文件:cookie3.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" session="false"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
	<%
	//1.创建一个Cookie对象
    Cookie cookie=new Cookie("name","11111111111111111111111111111");
	//2.调用response的一个方法把Cookie传给客户端
	response.addCookie(cookie);
	%>
</body>
</html>

第一次访问cookie3.jsp: ( http://localhost:8080/*/cookie3.jsp

请求域中并未携带cookies,服务端接受请求之后,进行响应,将生成的cookie 传至客户端,保存在内存中

第二次访问服务端时(http://localhost:8080/*/cookie3.jsp),请求域从内存中取出cookies并携带至服务端,服务端根据cookies对请求进行分类

浏览器下次访问时web服务器时,先从内存中取出Cookie,然后在http请求头中带着Cookie对象访问服务器。

cookie周期与cookie持久化:

服务端创建cookie后,通过响应发送至浏览器,默认生命周期就是一个会话周期,若关闭浏览器,cookie就会删除。

若希望cookie持久化,则需要使用maxAge方法,将cookie就会存储在磁盘中。在设置的生命周期内,关闭浏览器之后再打开,cookie仍然存在 。还可以在多个浏览器(同一种浏览器)窗口中共享(就是不同的会话中共享)。

案例:构建一个cookie.jsp

功能:但浏览器内存中有cookie时,浏览器直接打印出所有cookie,若没有cookie,则新建cookie,并对cookie 设置生命周期(本案例设置为120s),进行持久化。

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" session="false"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
	<% 
		//获取Cookie
		Cookie[] cookies=request.getCookies();
		if(cookies!=null&&cookies.length>0){
			//获取Cookie的name和value
			for(Cookie cookie:cookies){
				out.print(cookie.getName()+":"+cookie.getValue());
				out.print("<br>");
			}	
		}else{
			out.print("没有一个Cookie正在创建并返回");
			Cookie cookie=new Cookie("name","2222222222222222222222222222222");
			/* 
			cookie生存周期为5s,既最大时效,以秒为单位,若为0,表示立即删除该 Cookie 
			若为负数,表示不存储Cookie,若为正数,表示该cookie的存储时间,单位为秒
			*/
			cookie.setMaxAge(120);
			//调用response的一个方法把Cookie传给客户端
			 response.addCookie(cookie);//响应 */
		}
	%>
</body>
</html>

第一次访问cookie.jsp,请求中并未携带cookie,但服务器在创建cookie时,通过响应将cookie传递至客户端(浏览器)

通过不同的浏览器窗口第二次访问、第三次访问cookie.jsp:

获取相同的cookie,说明cookie存放在磁盘中(持久化),而不是每个窗口的内存中

猜你喜欢

转载自blog.csdn.net/fangxinde/article/details/82350364
今日推荐