cookie从哪来,存在哪,往哪去!

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

什么时候会提交cookie到服务器?
这个问题需要知道cookie的作用域,cookie有效的作用域为当前文件目录以及子目录。例如:

http://www.xxx.com/love
//如果此请求返回了cookie,并且path是/love
那么在程序的生命期间,通过AFN和android-async-http访问所有的/love目录以及/love/xxx的子目录的时候,框架会自动将cookie提交到服务器。
如果发起的请求不是/love目录本身或者其子目录,那么框架就不会将cookie提交到服务器。如果这个时候需要我们访问http://www.xxx.com/person接口的时候也带上之前返回的cookie,该怎么办?

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

HTTP response Header:
{
“Content-Type” = “text/html;charset=UTF-8”;
Date = “Thu, 29 Jun 2017 08:50:18 GMT”;
Server = “Apache-Coyote/1.1”;
“Set-Cookie” = “token=a27c5779-3718-4716-bbfa-6a51407c6d70”;
“Transfer-Encoding” = Identity;
}
其中”Set-Cookie”是response的Header中默认用来存储cookie的字段(当然你可以另外起其它名字,但是通用的规范还是这个字符串)

提交给服务器的cookie存在哪里?
和response的Header一样,request的Header中也有一个字段用来存储cookie字符串,这个字段默认是cookie,例如:

HTTP request Header:
{
Cookie = token=c66fbbc7-d799-426e-b065-d23226833dda;
Content-Type = application/x-www-form-urlencoded; charset=utf-8;
Device-OS = 10.3;
version = 1.0.57;
User-Agent = XProduct/1.0.57 (iPhone; iOS 10.3; Scale/2.00);
Device-Name = x86_64;
Accept-Language = zh-Hans-US;q=1, en;q=0.9;
}
具体怎么做?
现在知道了cookie是什么,从哪来,往哪去,那么事情就简单了,所以问题的最后变成了:如何获取response Header中的键值对以及如何设置request Header?
当然,不管是iOS还是Android都有提供相应的HTTPCookie框架,其次其本质无非就是从response Header中的”Set-Cookie”获取字符串,然后将指定的cookie存储在requset的Header中,例如:

//获取cookie
NSHTTPURLResponse res = (NSHTTPURLResponse )response;
//fields的输出结果就是上面的response header的内容
NSDictionary *fields = [res allHeaderFields];
NSLog(@”fields = %@”, [fields description]);
NSArray

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值