写给android工程师的cookie分析

本文旨在帮助Android开发者理解Cookie的本质和作用,探讨Cookie如何在HTTP中实现状态记录,以及在Android中如何使用Cookie来实现记住登录状态等功能。文章通过购物车故事解释Cookie的工作原理,介绍了Cookie的实现细节,包括HTTP头字段cookie和set-cookie,以及在Android中使用OkHttp进行Cookie操作的方法。同时,文章也提到了Cookie的缺点和安全问题。

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

前言

很高兴遇见你~

cookie在HTTP1.1版本中被添加,目的是为了解决HTTP的无状态特性,使HTTP变得“有状态”。

我们在做android开发,很多时候并不能很好理解cookie的存在价值、优化。这其实正常。Http中文翻译为超文本传输协议,是为web开发的传输协议。而cookie作为其中的一个功能,他的设计自然也是服务于web。为了更好地理解cookie他的本质,需要站在web开发的角度来理解他,具体而言就是使用浏览器网页具体化客户端。

android的发展要比web晚的多。虽然都使用cookie,但cookie相对于android并没有跟web一样有那么多的好处。但cookie也并不是完全没用,例如我们都知道cookie可以实现记住登录状态。

这篇的文章的目的在于帮助android开发者理解cookie的本质是什么,这样我们在使用cookie的时候会更加心里有底。

购物车的故事

我们都知道,HTTP是一个无状态的协议。无状态体现在每一次的请求与响应都是独立的,他们之间不会互相记录、互相影响。

嗯?我们在后端不是会维护购物车的状态,提供api给客户吗?是的,可以有,我们后端完全可以使用数据结构来存储购物车信息。但这不属于HTTP的范畴了,单纯的HTTP是无法实现这样的功能的,是吧?HTTP的每一次请求都是独立、不互相影响的,他不会记得上一次访问发送了什么返回了什么。

为了记住操作状态,http设计者在请求头中附加一些信息,来识别我们的操作状态:

客户端每次操作购物车,服务端都会为其生成一个字段,并把这个字段发送给客户端。这个字段存储了客户端前面的操作状态,下次客户端请求服务端的时候只需要把这个字段附加在请求头中,服务端通过解析这个字段的内容,就知道前面的请求都做了什么。

例如上图,客户端添加了一个橘子,服务端生成 【orange=1】 并发挥给客户端存储。客户端下一次操作只需要把 【orange=1】 附加在请求头中,服务端就知道客户已经添加一个橘子在购物车了。

到这里已经很明显了,这个字段就是cookie

cookie由服务端生成,在客户端中存储;客户端每次请求附加上cookie,服务端通过解析cookie的内容实现状态记录

整个cookie的机制中,客户端做的事情很简单:存储cookie,附加cookie。客户端不参与cookie的生成,也不参与cookie的修改。而服务端则负责cookie的生成与解析,但是不负责存储。

cookie的实现

cookie在HTTP中通过两个头部字段来实现:cookie和set-cookie

set-cookie在响应报文中附带,告知客户端需要存储该cookie。例如set-cookie:orange=1cookie是请求报文头部的一个字段,附带上服务端生成的cookie,例如cookie:orange=1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值