Android开发中需要了解的cookie知识

news/2024/5/18 14:29:33 标签: cookie

Cookie是由服务器端生成,发送给User-Agent,浏览器会将Cookie的key/value保存到某个目录下的文本文件内,下次请求同一网站时就发送该Cookie给服务器

Cookie的诞生

由于HTTP协议是无状态的,而服务器端的业务必须是要有状态的。Cookie诞生的最初目的是为了存储web中的状态信息,以方便服务器端使用。比如判断用户是否是第一次访问网站

Cookie的处理

Cookie的处理分为:
服务器向客户端发送cookie
浏览器将cookie保存
之后每次http请求浏览器都会将cookie发送给服务器端

1、服务器端的发送与解析
发送cookie
服务器端向客户端发送Cookie是通过HTTP响应报文实现的,在Set-Cookie中设置需要向客户端发送的cookiecookie格式如下:

Set-Cookie: “name=value;domain=.domain.com;path=/;expires=Sat, 11 Jun
2016 11:29:42 GMT;HttpOnly;secure”

其中name=value是必选项,其它都是可选项

Cookie的主要构成如下
name:一个唯一确定的cookie名称。通常来讲cookie的名称是不区分大小写的
value:存储在cookie中的字符串值。最好为cookie的name和value进行url编码
domain:cookie对于哪个域是有效的。所有向该域发送的请求中都会包含这个cookie信息。这个值可以包含子域(如:yq.aliyun.com),也可以不包含它(如:.aliyun.com,则对于aliyun.com的所有子域都有效)
path:表示这个cookie影响到的路径,浏览器跟会根据这项配置,像指定域中匹配的路径发送cookie
expires:失效时间,表示cookie何时应该被删除的时间戳(也就是,何时应该停止向服务器发送这个cookie)。如果不设置这个时间戳,浏览器会在页面关闭时即将删除所有cookie;不过也可以自己设置删除时间。这个值是GMT时间格式,如果客户端和服务器端时间不一致,使用expires就会存在偏差。
max-age:与expires作用相同,用来告诉浏览器此cookie多久过期(单位是秒),而不是一个固定的时间点。正常情况下,max-age的优先级高于expires
HttpOnly:告知浏览器不允许通过脚本document.cookie去更改这个值,同样这个值在document.cookie中也不可见。但在http请求张仍然会携带这个cookie。注意这个值虽然在脚本中不可获取,但仍然在浏览器安装目录中以文件形式存在。这项设置通常在服务器端设置
secure:安全标志,指定后,只有在使用SSL链接时候才能发送到服务器,如果是http链接则不会传递该信息。就算设置了secure 属性也并不代表他人不能看到你机器本地保存的 cookie 信息,所以不要把重要信息放cookie就对了

服务器端解析cookie
cookie可以设置不同的域与路径,所以对于同一个name value,在不同域不同路径下是可以重复的,浏览器会按照与当前请求url或页面地址最佳匹配的顺序来排定先后顺序

所以当前端传递到服务器端的cookie有多个重复name value时,我们只需要最匹配的那个,也就是第一个

2、客户端的存取
浏览器将后台传递过来的cookie进行管理,并且允许开发者在JavaScript中使用document.cookie来存取cookie


在这里插入图片描述
Cookie是由服务器生成的。客户端第一次向服务器发送Http请求时,由于没有Cookie,在Http请求头中即Header中不包含"Cookie"

服务器会在Response Header中带过来一个Set-Cookie,内容为JSESSIONID=xxxx

在这里插入图片描述

再次请求时,浏览器会在Requst Header中的Cookie将JSESSIONID带上,服务器就会知道是哪个用户再次访问了该服务器

Android中的Cookie

在Android上是不会自动保存cookie,如果没有保存和重发cookie给服务器的话,是不会自动登录的
如果网络请求使用NoHttp,NoHttp自动维持Cookie,实现了和浏览器一样的功能;并且开发者可以自己从响应中拿到Cookie


http://www.niftyadmin.cn/n/1817568.html

相关文章

面试官要是问你Python 的变量、对象以及引用,怎么回答?

00.写在之前写这篇文章源自上次和一位读者的交流,在给他回答问题的时候我发现由于之前有学习 C 和 Java 这种静态编译类型语言的背景,使他在学习 Python 的时候还是会习惯用之前编程语言的思考去尝试理解 Python,导致他有时候会觉得很困惑&am…

Android开发中需要了解的session知识

Cookie和Session都为了用来保存状态信息,都是保存客户端状态的机制,它们都是为了解决HTTP无状态的问题而所做的努力 Session可以用Cookie来实现,也可以用URL回写的机制来实现 Cookie和Session有以下明显的不同点: 1&#xff09…

聊一聊 Python 对象的垃圾回收机制

00.写在之前有时候写代码玩,懒得去想变量名的时候,你可能会做出下面这样的举动:>>> a 1 >>> a 2.0 >>> a Rocky虽然可能看着有些奇怪,a 刚开始是个整数,然后又变成了浮点数,…

【达内课程】音乐播放器4.0(图片显示、bitmap图片压缩)

文章目录专辑图片展示图片压缩专辑图片展示 ListView中异步批量加载图片业务 使用单线程轮循任务队列的机制完成该业务 修改接口多传一个参数 type,查询综合信息,修改 UrlFactory public class UrlFactory {/*** url地址** param keyword* return jso…

历时3个月,最专业的原创Python知识星球横空出世!四重惊喜等着你!

历时3个月的准备,【人人都是Pythonista】正式对外接客了!通过知识星球APP或微信小程序搜索:人人都是Pythonista,即刻加入我们!星球囊括了:【从零单排】【实战项目】【Python面试题】【大航海】【大数据】【…

bilibili源码泄漏后,程序员们从代码里扒出来的彩蛋

昨天bilibili又上热搜了,被某人在github上开了个账号,传了份整个后端代码到github,这是被人扒光了衣服看个精光啊。 这件事情,作为程序员的我们除了调侃和fork的同时,想一想,造成这个结果的原因是什么&…

【达内课程】Bitmap图片的压缩

BitmapUtils import android.graphics.Bitmap; import android.graphics.BitmapFactory;import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream;public class BitmapUtils {/*** 压缩图片,获取相应尺寸的图片* param is …

【达内课程】音乐播放器4.0(Android中的GC垃圾回收机制、图片优化)

文章目录GC 垃圾回收机制Java 中的引用GC 垃圾回收机制 当main()方法执行完,main()方法中的局部变量都会弹栈,从栈当中销毁 当左侧栈中的e2和e销毁后,右侧中的两个对象就是垃圾 java底层有一种GC垃圾回收机制,在java程序运行时&am…