什么是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从哪来,存在哪,往哪去。

转载于:https://www.cnblogs.com/annie211/p/8513040.html

Cookie是什么?从哪来?存在哪?往哪去?相关推荐

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

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

  2. [JavaEE笔记]Cookie

    引言 由于 Http 是一种无状态的协议,服务器单从网络连接上无从知道客户身份. 会话跟踪是 Web 程序中常用的技术,用来跟踪用户的整个会话.常用会话跟踪技术是 Cookie 与 Session. ...

  3. 关于cookie的文章(cookie与session机制)

    会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话.常用的会话跟踪技术是Cookie与Session.Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端 ...

  4. Cookie/Session机制详解--如何区分不同用户

    转载自:https://www.cnblogs.com/zhouhbing/p/4204132.ht 会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话.常用的会话跟踪技术是C ...

  5. Day71 分页,cookie and Session

    cookie 是保存在客户端的键值对. cookie本身最大支持4096字节,保存在客户端的 session是保存在服务器端的键值对.(依赖cookie) cookie和session cookie的 ...

  6. [转]Cookie/Session机制详解

    会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话.常用的会话跟踪技术是Cookie与Session.Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端 ...

  7. vue项目实现记住密码到cookie功能

    vue项目实现记住密码到cookie功能(附源码) 实现功能: 1.记住密码勾选,点登陆时,将账号和密码保存到cookie,下次登陆自动显示到表单内 2.不勾选,点登陆时候则清空之前保存到cookie ...

  8. Cookie、Session、Token那点事儿

    前言:新公司项目中使用到了Cookie,在各大Android技术讨论群向前辈们取经讨论这cookie.session.token这仨哥们的时候,很多开发者说法不一各抒已见,所以是时候回顾下http基础 ...

  9. 白话 Session 与 Cookie:从经营杂货店开始

    在Web开发里面有一个历久不衰的议题,那就是Session与Cookie的区别.从我刚开始学程序时这一题就常出现在面试考题里,一直到现在都还是能看见这个问题. 这个问题重要吗? 我觉得满重要的.因为S ...

  10. cookie 和 session 详解

    cookie 和 session 详解 文章目录 cookie 和 session 详解 一.Cookie机制 1.Cookie引入 2.什么是Cookie 3.Cookie的不可跨域名性 4. Un ...

最新文章

  1. CloudCompare基础教程(1)-介绍
  2. redis 数据库主从不一致问题解决方案
  3. 跟我一起写 Makefile(十二)
  4. python正则表达式——re模块
  5. 【PDF下载】无意中发现的另三本统计学入门好书
  6. Pytorch基础(八)——正则化
  7. 后端:死磕18个Java8日期处理,工作必用!
  8. 加密芯片——摘要算法特点与应用注意事项
  9. python之语音识别(speech模块)
  10. AttributeError: module ‘tensorflow‘ has no attribute ‘ConfigProto‘
  11. JAVA基本数据类型几个字节_java基本数据类型各占多少字节?
  12. 多国语言点阵字库合并!!!
  13. TODO:这是一个我的自媒体
  14. Azure微软云(部署一台虚拟机云服务器)
  15. 计算机网络-网络边缘
  16. 解剖SQLSERVER 第十七篇 使用 OrcaMDF Corruptor 故意损坏数据库(译)
  17. Android朋友圈怎么换行,2020年发朋友圈打字怎么换行
  18. java-net-php-python-4java个人博客系统计算机毕业设计程序
  19. ubuntu ceres-solver 安装
  20. 百度地图经纬度和像素坐标互转

热门文章

  1. 人活着的三种境界[转帖]
  2. 计算机技术与移动支付的关系,移动支付的破与立
  3. 前端视频预览功能的实现
  4. 神经网络之 CNN 与 RNN 再梳理
  5. 在word修改模式下如何进行修改
  6. 代码服务流水线部署平台
  7. 浅谈快件清关与邮关的区别
  8. React 中闭包陷阱问题分析
  9. 数组,数组的定义,数组的注意事项
  10. 20189200余超 2018-2019-2 移动平台应用开发实践第十二周作业