cookie详解

cookie

1、简介
Cookie 可以翻译为“小甜品,小饼干” ,Cookie 在网络系统中几乎无处不在,当我们浏览以前访问过的网站时,网页中可能会出现 :你好 XXX,这会让我们感觉很亲切,就好像吃了一个小甜品一样。这其实是通过访问主机中的一个文件来实现的,这个文件就是 Cookie。在 Internet 中,Cookie 实际上是指小量信息,是由 Web 服务器创建的,将信息存储在用户计算机上的文件。一般网络用户习惯用其复数形式 Cookies,指某些网站为了辨别用户身份、进行 Session 跟踪而存储在用户本地终端上的数据,而这些数据通常会经过加密处理 。
Cookie 在计算机中是个存储在浏览器目录中的文本文件,当浏览器运行时,存储在 RAM 中发挥作用 (此种 Cookies 称作 Session Cookies),一旦用户从该网站或服务器退出,Cookie 可存储在用户本地的硬盘上 (此种 Cookies 称作 Persistent Cookies) 。
通常情况下,当用户结束浏览器会话时,系统将终止所有的 Cookie。当 Web 服务器创建了Cookies 后,只要在其有效期内,当用户访问同一个 Web 服务器时,浏览器首先要检查本地的Cookies,并将其原样发送给 Web 服务器。这种状态信息称作“Persistent Client State HTTP Cookie” ,简称为 Cookies
2、原理
Web服务器通过在HTTP响应信息中增加Set-Cookie响应头字段将Cookie信息发送给浏览器,浏览器再次向Web服务器发送请求时,在HTTP请求消息中增加Cookie请求头字段将Cookie再回传给Web服务器。
index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!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>
		ok
	</body>
</html>

我们在本地服务器发布之后访问index.jsp,并且在浏览器的网络控制台中看到:
在这里插入图片描述
在不关闭浏览器的情况下再次访问该页面:
在这里插入图片描述
Cookie类常用方法

1、getName(),getValue()。
一个Cookie只能标识一种信息,它至少含有一个标识该信息的名称(NAME)和设置值。
Cookie cookie=new Cookie(name,值);

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!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 = new Cookie("name","tom");
			response.addCookie(cookie);
			Cookie [] cookies = request.getCookies();
			for(Cookie cookie1:cookies){
				System.out.println(cookie1.getName()+"——>"+cookie.getValue());
			}
		%>
	</body>
</html>

我们在上述代码中尝试得到一次会话中的所有cookie。
第一次访问:
在这里插入图片描述
报错了,因为此时cookie是在response header中保存,在进行request.getCookies()时得到null,之后代码包空指针异常。
第二次访问:

在这里插入图片描述
可以正常访问,并且request headers中的cookie有两项。
在eclipse的控制台查看结果:
在这里插入图片描述
2、setMaxAge(int age) :默认情况下Web服务器发送到客户端浏览器的Cookie是一个会话级别的Cookie,此时的Cookie信息存储在浏览器内存中,用户退出浏览器后该Cookie被删除;若希望客户端浏览器将Cookie信息存储在磁盘文件(C:\Users\计算机名称\AppData\Local\Google\Chrome\User Data\Default\Cache)上,则需要设置Cookie最大时效,该方法传入的实参是一个以秒为单位的数值;若设置为0,则命令浏览器立即删除该Cookie。
我们在上面代码中添加cookie.setMaxAge(10),代表此cookie的时效为10s,我们第一次访问:在这里插入图片描述
报错,原因依旧是此时cookie是在response header中保存,在进行request.getCookies()时得到null,之后代码报空指针异常。
关闭浏览器,在10s内再次打开:
在这里插入图片描述
可以正常打开,并且cookie中有内容。
等带10s再次访问:
在这里插入图片描述
报错,证明cookie已经被删除。
应用
30天免登录;记录浏览器记录;记录当前用户信息。
缺点
安全性差(多人用一个电脑);
cookie信息是可以删除的();
cookie只能存储字符串类型的内容。
cookie与session

sessioncookie
保存位置服务器浏览器
存储类型对象字符串
生命周期随会话关闭而结束可指定时长
存放信息重要性重要信息非重要信息
  • 5
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值