Cookie

一、什么是cookie?

cookie是服务器通知客户端保存键值对的一种技术。客户端有了cookie后,每次请求都会将cookie发送给服务器;每个cookie的大小不能超过4kb;

二、创建cookie

//服务端创建cookie
Cookie cookie = new Cookie(“key”,“value”);

//通知客户端保存cookie
responce.addCookie(cookie);

响应头出现Set-Cookie项,浏览器去查找有没有相关的cookie,如果没有cookie就创建;有的话就把值替换;
在这里插入图片描述
cookie的创建过程:
在这里插入图片描述

三、获取cookie

浏览器在向服务器发送请求时,会携带自己保存的所有cookie(cookie信息在请求头cookie内);

服务器获取浏览器发送过来的cookie:
Cookie[] cookies = request.getCookies();

获取cookie只有getCookies()这一个方法,得到的是cookie数组;如果我们想要获取某一个cookie,也只能遍历返回的cookie数组;

创建一个获取指定key值的cookie的工具类:

public class CookieUtils{
	public static Cookie getCookie(String key,Cookies[] cookies){
		if(key==null||cookies==null||cookies.length==0){
			return null;
		}
		for(int i=0;i<cookies.length;i++){
			if(key.equals(cookies[i].getName())){
				return cookies[i];
			}
		}
		return null;
	}
}

四、cookie值的修改

假设现在浏览器保存着一个cookie(key1 = value1);
我们想要修改这个cookie的value值,有两种方式;

第一种方案:
服务器创建一个同名的cookie,发送给客户端;
Cookie cookie = new Cookie(“key1”,“value2”);
responce.addCookie(cookie);
这时浏览器保存的键为key1的cookie的值就会发生改变;

第二种方案:
在服务端找到需要修改的cookie,调用setValue()方法;
在这里插入图片描述

五、火狐浏览器查看cookie

在这里插入图片描述

六、cookie生命控制

cookie的生命控制指的是如何管理cookie什么时候被销毁,使用setMaxAge()进行控制;参数默认是负数;
如果参数是正数,表示该cookie的最长生活时间,单位是秒;
如果参数是负数,表示cookie在浏览器关闭后就被销毁;
如果是 0 ,表示cookie在创建完后就被销毁。

七、设置path属性

cookie的path属性可以有效过滤哪些cookie发送给服务器,哪些不发送;
在这里插入图片描述
创建一个cookie后,调用setPath()方法,设置当前cookie的path属性;当浏览器发送请求时,如果cookie的path属性的值满足浏览器发送的请求的URL,那么该cookie才会发送;
在这里插入图片描述

八、相关问题

1、cookie能不能存储中文?

在tomcat8之前cookie中不能直接存储中文数据,需要将中文数据转码,一般采用URL编码(%E3);
在tomcat8之后cookie支持中文数据。特殊字符还是不支持,建议使用URL编码存储,URL解码解析

2、cookie共享问题

(1)假设在一个tomcat服务器中,部署了多个web项目,那么在这些web项目中cookie能不能共享? 默认情况下cookie不能共享,因为cookie的path属性的值为当前工程;将cookie的path属性设置"/",就能实现不同的项目访问同一个cookie。

(2)不同的tomcat服务器间cookie共享问题?

setDomain(String path):如果设置一级域名相同,那么多个服务器之间cookie可以共享;
假如:setDomain(".baidu.com"),那么tieba.baidu.com和news.baidu.com中cookie可以共享。

九、案例

使用cookie实现记住上一次访问时间;

实现思路:
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值