Cookie是什么?从哪来?存在哪?往哪去?

Cookie是什么?从哪来?存在哪?往哪去?,第1张

cookie最简单的介绍就是服务器返回的一个字符串信息,只不过我们每次请求都需要把它发送给服务器。以AFN和android- async - http 为例子,默认都会把cookie自动保存并且下次发送请求的时候将cookie提交给服务器。

这个问题需要知道cookie的作用域,cookie有效的作用域为当前文件目录以及子目录。例如:

那么在程序的生命期间,通过AFN和android- async - http 访问所有的 /love 目录以及 /love/xxx 的子目录的时候,框架会自动将cookie提交到服务器。

如果发起的请求不是 /love 目录本身或者其子目录,那么框架就不会将cookie提交到服务器。如果这个时候需要我们访问 http://www.xxx.com/person 接口的时候也带上之前返回的cookie,该怎么办?

最简单的办法就是自己做cookie的存储和发送,服务器返回的cookie会存储在response 的Header里面,例如:

其中"Set-Cookie"是response的Header中默认用来存储cookie的字段(当然你可以另外起其它名字,但是通用的规范还是这个字符串)

和response的Header一样,request的Header中也有一个字段用来存储cookie字符串,这个字段默认是 cookie ,例如:

现在知道了cookie是什么,从哪来,往哪去,那么事情就简单了,所以问题的最后变成了: 如何获取response Header中的键值对以及如何设置request Header?

当然,不管是iOS还是Android都有提供相应的HTTPCookie框架,其次其本质无非就是从response Header中的"Set-Cookie"获取字符串,然后将指定的cookie存储在requset的Header中,例如:

上面 NSHTTPCookie 的类方法其实就是将上面的respnse Header中的cookie字符串拆分成为一对象,比如下面就是拆分结果:

我们完全可以不需要使用NSHTTPCookie,无非就是从response Header中获得 Set-Cookie 字段对应的字符串罢了。

至于将cookie设置到request Header中的框架API,我就没有去细看,因为我直接手动设置:

至于怎么使用API去做cookie,这个搜索一下还是挺多介绍的,本文主要介绍的是cookie从哪来,存在哪,往哪去。

如果你的afn是3.0以后的话 AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]

[manager.requestSerializer setValue:@"iOS" forHTTPHeaderField:user_os]


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/11189977.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-14
下一篇 2023-05-14

发表评论

登录后才能评论

评论列表(0条)

保存