JavaWeb——Cookie

本文深入讲解Cookie的概念,包括其作用、设置与获取方法,以及如何通过Cookie实现会话控制。探讨了Cookie在用户登录状态保持、广告精准推送及保存用户名等场景的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、Cookie简介
 Cookie是客户端(一般指浏览器)请求服务器后服务器发给客户端的一个辨认标识,保存在客户端,当客户端再次向服务器发送请求时,会携带着这个辨认标识,服务器就可以通过这个标识来识别客户端的身份或状态等。
 Cookie的作用:跟踪会话,记录一次会话中(即Session,一次会话可能会有多次请求,当然也可以有多个Cookie来跟踪不同的信息)的信息,这样服务器就会知道用户的状态,比如有没有登录成功,付款时购物车中的东西等,就相当于贴在客户端脑门上的纸条,浏览器看不到,但服务器看得到。
 Cookie的应用:
  1️⃣保持用户登录状态
在这里插入图片描述
  2️⃣记录用户名:
在这里插入图片描述
  3️⃣记录浏览过的信息网上商城的购物车和

二、Cookie的设置和获取
 1、通过HttpServletResponse设置Set-Cookie响应头:需要注意cookie中的内容是一个个的键值对,也就是说Set-Cookie响应头中可以包含多个Cookie,各个Cookie键值对间使用;隔开

response.addHeader("Set-Cookie","cookie中的内容");

 2、通过HttpServletResponse.addCookie的方式设置Cookie:注意new Cookie()时两个参数都是字符串

Cookie cookie = new Cookie("jieguo","true");
response.addCookie(cookie);

 3、浏览器中查看cookie的内容:
在这里插入图片描述
 4、服务端获取客户端携带的cookie:通过HttpServletRequest获取

Cookie[] cookies = request.getCookies();
if(cookies != null)
	for(Cookie c : cookies){
		String name = c.getName();//获取Cookie名称
		if("jieguo".equals(name)){
			String value = c.getValue();//获取Cookie的值
			bool = Boolean.valueOf(value);//将值转为Boolean类型
		}
	}

Tip
  1️⃣设置cookie用response,获取cookie用request
  2️⃣cookie是不能跨浏览器的
 5、Cookie的覆盖
  如果服务器端向客户端发送重复的Cookie那么客户端原有的Cookie会被覆盖,例如客户端第一次请求服务器端,服务器端发送的Cookie是Set-Cookie:a=A,第二次请求发送的Cookie是Set-Cookie:a=AA,那么客户端只会留下后发送的Cookie,即a=AA

三、会话控制
 HTTP协议有两大缺点:
  1️⃣无态状
   - 服务器不能区分不同浏览器不同用户发送的不同请求
   - 不能知道多次请求是否发送自同一个用户
  2️⃣纯文本:利用BeanUtils将传递的参数封装为对象克服了该缺点
 服务器不能通过HTTP的请求报文来识别浏览器,但是我们又有这个需求。我们可以结合一下现实生活:我们现实生活中在看电影的时候,检票的人员是认票不认人的,也就是我们可以通过一张电影票来识别不同的用户。我们的服务器可不可以发给浏览器一张票呢?以后浏览器在访问服务器时就可以带着这张票,然后我们通过检查票的信息不就可以识别不同的浏览器了吗?
 电影院的运作:
  ①电影院要创建票
  ②将电影票发给顾客
  ③顾客带着票去看电影
  ④电影院要检票
 Cookie的流程:
  ①服务器创建Cookie
  ②将Cookie发送给浏览器
  ③浏览器带着Cookie来访问服务器
  ④服务器检查浏览器的Cookie
 Cookie是服务器发送给浏览器的一张票,浏览器在收到这张票以后,每次访问服务器时都会带着这张票,服务器就可以根据票上的信息来识别不同的浏览器。
 Cookie是一个请求头(或响应头):服务器以响应头的形式将Cookie发送给浏览器;浏览器以请求头的形式将Cookie发回给服务器。
 服务器通过响应报文将Cookie发送给浏览器,具体格式如下:

//创建Cookie	
Cookie cookie = new Cookie(name,value);
//发送Cookie	
response.addCookie(cookie);

 浏览器收到该响应头以后,会自动保存Cookie信息,并在以后的访问中携带该Cookie:

Set-Cookie: username=sunwukong; age=18

 服务器端读取Cookie:

Cookie[] cookies = request.getCookies();
if(cookies != null)
	for(Cookie c : cookies){
		String name = c.getName();//获取Cookie名称
		if("jieguo".equals(name)){
			String value = c.getValue();//获取Cookie的值
			bool = Boolean.valueOf(value);//将值转为Boolean类型
		}
	}

 修改Cookie:Cookie一旦发送给浏览器,那么服务器将不能直接修改,但是可以通过使用同名Cookie来替换浏览器已有Cookie的方式,来间接的修改。浏览器收到新Cookie以后,就会将老的Cookie销毁,然后使用新的Cookie。
 删除Cookie:通过设置同名Cookie的最大存活时间为0,删除Cookie是指使浏览器不再保存Cookie,使Cookie立即失效,举例:使name为username的Cookie立即失效

//1.创建一个name为username的Cookie
Cookie cookie = new Cookie("username", "aaa");
//2.设置Cookie的有效时间为0
cookie.setMaxAge(0);//删除cookie的关键
//3.将cookie发送给浏览器,来替换同名Cookie
response.addCookie(cookie);

 Cookie的有效时间:Cookie发送给浏览器以后,浏览器并不会永久保存,也就是到了一定的时间以后浏览器会自动销毁Cookie。Cookie的默认有效时间为一次会话(一次打开关闭浏览器的过程),我们也可以手动指定Cookie的有效时间

//setMaxAge用来设置Cookie的最大有效时间,需要int型的参数,代表有效的秒数
cookie.setMaxAge(秒数)//当参数大于0时,会设置为指定的秒数
cookie.setMaxAge(30);
//当参数等于0时,浏览器不会保存Cookie,Cookie立即失效
cookie.setMaxAge(0);
//当参数小于0时,和不设置是一样,当前会话有效
cookie.setMaxAge(-100);
//设置一个永久有效的Cookie,并非永久,只是使Cookie的生命很长而已
cookie.setMaxAge(60*60*24*365*10);

  Cookie的Path:path指访问路径,此处是指浏览器在访问哪些地址时会携带该Cookie,默认情况下只要访问的资源是当前项目下的资源,浏览器就会带着该Cookie,也就是说Cookie默认的path是项目的根目录,我们可以手动指定Cookie的路径,Cookie路径由浏览器解析,所以需要加上项目名

// /11_WEB_Cookie/hello指凡是访问项目根目录下hello路径下的资源都会携带Cookie,否则不携带
cookie.setPath("/11_WEB_Cookie/hello");

四、Cookie的应用举例
 1、保持用户的登录状态:不安全
  将用户的信息保存到Cookie中,并发送给浏览器,并且将有效时间设置为一个较长的时间,这样浏览器在以后访问网站时,都会带着该Cookie,服务器以此来辨识用户,用户就不再需要输入用户名和密码等信息。但是Cookie是纯文本的,很容易被截获,所以我们在使用Cookie保存敏感信息时一般都需要进行加密。
 2、广告的精确推送
  我们在使用百度搜索时,它会将我们搜索的关键字之类的信息保存到Cookie中,当我们访问带有百度广告的链接时,该Cookie信息会自动发送给Baidu,百度就可以根据Cookie的信息给你推送广告
 3、保存用户名:Taobao
  一旦用户登录成功以后,下次再登录时,直接将Cookie中的用户名读取并显示出来,这样用户就不需要再次输入用户名,只输入密码即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值