美文网首页
Cookie是什么?从哪来?存在哪?往哪去?

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

作者: Little_Mango | 来源:发表于2017-06-29 17:23 被阅读3413次

什么是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<NSHTTPCookie *> *cookie = [NSHTTPCookie cookiesWithResponseHeaderFields:fields forURL:request.URL] 

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

<NSHTTPCookie version:0 name:"token" value:"a27c5779-3718-4716-bbfa-6a51407c6d70"
 expiresDate:(null) created:2017-06-29 08:50:21 +0000 sessionOnly:TRUE domain:"102.211.179.114" 
partition:"none" path:"/XProduct" isSecure:FALSE>

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

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

httpRequestSerializer = [AFHTTPRequestSerializer serializer];
//token是一个字符串,是response header中'Set-Cookie'对应的字符串
[httpRequestSerializer setValue:token forHTTPHeaderField:@"cookie"]

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

相关文章

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

    什么是cookie? cookie最简单的介绍就是服务器返回的一个字符串信息,只不过我们每次请求都需要把它发送给服...

  • 悠悠水葫芦

    悠悠水葫芦 江面任逍遥 不知从哪来 又要往哪去

  • 是 GPS坏了吗?我在那儿?

    5-28 我在哪儿? 从哪来? 到哪去? 弱小的我该怎么办?

  • 听闻王东岳先生言论有感

    每个对人生有所思的人都有可能会问:“我是谁,从哪来,往哪去,我在哪?” 人追求存在是一切思考的本源,怀疑是...

  • 什么是教育

    教育是帮助我们修心,让我们更好的认识自己。知道我从哪来,我是谁,要往哪去。

  • 底层女屌丝八年职业生涯的人生感悟

    每当夜深人静,我的大脑思考区自动进行每日的反思总结,经常反问自己:我是谁?我从哪来?我要往哪去?我的初心是什么?...

  • 从哪来?到哪去?

    从前的我满怀希望的来到大学,现在的我只希望能安安静静的过完这余下的大学时光。 从哪来?到哪去?已经是个老生常谈的话...

  • 生的意义

    我是谁?我在哪?生活的意义是什么?由哲学三大问题:我是谁,我从哪来,到哪去。演变出的三个表情包让我们以幽默的形式...

  • 活动运营:是什么?从哪来?到哪去?

    哲学上有个终极命题,很多人这一辈子也经常会问自己这样3个问题。是什么?从哪来?到哪去?本文采集了众多观念,最后集合...

  • 《中华崛起与人类质变》序言的解读(一)

    《中华崛起与人类质变》序言的解读(一) 《中华崛起与人类质变——我们是谁?我们从哪来?我们往哪去?》一书的序...

网友评论

      本文标题:Cookie是什么?从哪来?存在哪?往哪去?

      本文链接:https://www.haomeiwen.com/subject/ehxvcxtx.html