Cookie的工作原理

http是无状态的,这是什么意思呢?就是说,在没有cookie之前,你第一次访问这个页面和第二次访问这个页面,

服务器是不知道的,不知道前一次是你。那么问题来了,我怎么登录,登录成功后,刷新下,服务器就不认识我了,

不展示我的信息了,这怎么能行,于是cookie就产生了,cookie是存在客户端的,最常见的就是浏览器了,

你第一次访问页面的时候,服务器会返回个cookie给你,这个cookie其实就是sessionId,并存于客户端,

第二次的时候,你刷新页面的时候,浏览器就会带上之前的cookie,cookie就像通行证,每人一个,

无论谁访问都必须携带自己通行证。这样服务器就能从通行证上确认客户身份了,这就是Cookie的工作原理。

cookie可以设置有效期的,最常见的大家经常看到网站上的记住我功能,它就是利用cookie的有效期,

可以让用户一段时间内免登录,cookie还可以存储一些其它的信息,比如像早期有的购物网站,

用户购物车这个东西,这个购物车因为用户可能会一会添加一会删除,如果存在数据库里的话,

因为频繁的操作,会对数据库造成一定的压力,毕竟用户可能到最后啥也没买,我的数据库服务器却收到了一万点暴击,

于是cookie的作用就来了,购物车信息存在cookie里,这样服务器就没有来自购物车的压力了,

平摊到了千千万万的用户浏览器上了,是不是很绝妙。

session是干嘛的

既然cookie可以存数据,那么直接存用户的信息不好吗?干嘛还要session。这就涉及到网络安全的问题了,

cookie存在客户端,假如把你的银行卡信息存在cookie里,这时你去上个厕所,其他同事去翻了你的cookie,

不是被盗了吗,是不是很危险。于是就有了session。

session才是存用户的一些隐私信息的,session是存在服务器端的,非法用户一般是无法盗取的,很安全。

一般登录用户请求页面的时候,浏览器会带上服务器颁发的凭证cookie,凭着这个凭证,

找到服务器里存着对应的session数据,一判断session里有用户信息,于是根据用户信息返回相关数据。

登录功能就是这样实现的。

如果一个网站有千万的用户,千万的用户同时在线,那么服务器就要维护千万份的session,压力山大,

所以可以考虑把session持久化到redis或者memcached中,减轻web服务器的压力,提高web的响应速度。

iOS cookie的查取

当你访问一个网站时,NSURLRequest都会帮你主动记录下来你访问的站点设置的Cookie,如果 Cookie 存在的话,

会把这些信息放在 NSHTTPCookieStorage 容器中共享,当你下次再访问这个站点时,NSURLRequest会拿着上次保存下来了的Cookie继续去请求。
同样适用于ASIHTTPRequest,AFNetworking, Webview等,Cookie常用于一些基于认证的网络请求

NSHTTPCookieStorage

NSHTTPCookieStorage 实现了一个管理cookie的单例对象(只有一个实例),每个Cookie都是NSHTTPCookie类的实例,

另外Cookie在所有应用之间共享并在不同进程之间保持同步。Session Cookie(一个isSessionOnly方法返回YES的Cookie)只能在单一进程中使用。

cookie

Cookie是由服务器端生成,发送给User-Agent(一般是浏览器或者客户端),浏览器会将Cookie的key/value保存到某个目录下的文本文件内,

下次请求同一网站地址时就发送该Cookie给服务器

HTTP header

HTTP header中包含HTTP请求与响应的操作参数. header属性定义了所传输数据的各种特性. header属性以属性名开始,

以冒号结尾,最后是属性值.属性名及值会因应用的不同

查看cookie

在请求网络后执行下面代码,就可以看到cookie了。

    NSHTTPCookieStorage *cookieJar = [NSHTTPCookieStorage sharedHTTPCookieStorage];
NSArray *cookieArr = [cookieJar cookies];
for(NSHTTPCookie *cookie in cookieArr) {
NSLog(@"cookie -> %@", cookie);
if ([cookie.name isEqualToString:@"_xxx_session"]) { }
}

举例如下:

<__NSArrayM 0x280347a20>(

<NSHTTPCookie

version:

name:_xxx_session

value:dENxcHNNY21TV2hCQzR6Q0hCTDE0bjlvaVQ4bFFGK3Zqak5JcDFUQUFCU3N0ZW42ejRNcnVMTFF2WHc5K1RyQVRWNENXdmxIV1RyMkhNV0ZzRFo4OHQwUDNXZTU5c1pRNWNxNjBDZEZOWjk5MUFaY2JvNTVVeUlkM3VUSHVvUURXWG9ZbE81STNQSjV5UzBFN1Z6L3V0K0VYYU5FMFJMRlVLT3BpbTdIZ2xJPS0tMW12S05naDF2NGdzWHVFL3Z0dXNUQT09--4b532f9179c51677ec5d2772077e268752373ce5

expiresDate:'(null)'

created:'2019-06-19 06:23:01 +0000'

sessionOnly:TRUE

domain:xxx.xxx.com

partition:none

sameSite:none

path:/

isSecure:FALSE

isHTTPOnly: YES

 path:"/" isSecure:FALSE isHTTPOnly: YES>

)

NSHTTPCookieStorage实现cookie管理

网络框架AFNetworking  没有对Cookie 做过处理。

可以使用NSHTTPCookieStorage实现cookie管理

1.存cookie

【NSHTTPCookieStorage sharedHTTPCookieStorage 】cookiesforURL:

2.设置cookie

【NSHTTPCookieStorage sharedHTTPCookieStorage 】setCookie:

3.清理

【NSHTTPCookieStorage sharedHTTPCookieStorage 】 deleteCookie:

token算是session的另一种说明吧

http:短连接使用token 机制来验证用户安全性

token 值: 登录令牌! 用来判断当前用户的登录状态!

token 值特点: 是一个字符串/大整数,只需要保证唯一性.是服务器根据用户的信息(账号/密码/身份认证机制(电话号/身份证号/支付宝账号/银行卡信息)...)来生成的用于标识用户身份的值! 上面的

value:dENxcHNNY21TV2hCQzR6Q0hCTDE0bjlvaVQ4bFFGK3Zqak5JcDFUQUFCU3N0ZW42ejRNcnVMTFF2WHc5K1RyQVRWNENXdmxIV1RyMkhNV0ZzRFo4OHQwUDNXZTU5c1pRNWNxNjBDZEZOWjk5MUFaY2JvNTVVeUlkM3VUSHVvUURXWG9ZbE81STNQSjV5UzBFN1Z6L3V0K0VYYU5FMFJMRlVLT3BpbTdIZ2xJPS0tMW12S05naDF2NGdzWHVFL3Z0dXNUQT09--4b532f9179c51677ec5d2772077e268752373ce5

就是喽。

token 值获取:

// 当用户首次登录成功之后, 服务器端就会生成一个 token 值.

1.会在服务器保存token值(保存在数据库中)

2.将这个token值返回给客户端.

// 客户端拿到 token 值之后,一般保存在两个位置 :

1. 将 token 保存在 cookie 中;

2.将 token 保存在沙盒中,作为一个公共参数传递.

公共参数: 每一个网络请求都需要的参数! 一般公共参数有很多都是"可选"参数!,公共参数附带的越多,越利于后台监测用户,数据挖掘会使用到监测到的数据.

以后客户端再次发送网络请求(一般不是登录请求)的时候,就会将这个 token 值附带到参数中发送给服务器.

服务器接收到客户端的请求之后,会取出token值与保存在本地(数据库)中的token值做对比!

如果两个 token 值相同 :说明用户登录成功过!当前用户处于登录状态!

如果没有这个 token 值, 没有登录成功.

如果 token 值不同: 说明原来的登录信息已经失效,让用户重新登录.

补充:怎么将 token 保存在 cookie 中,当APP进入后台,把token保存一下,当进入前台再进行存入在 cookie 中。

相关链接:https://www.cnblogs.com/W-Kr/p/5478702.html

cookie和session以及iOS cookie的查取的更多相关文章

  1. 会话Cookie及session的关系(Cookie & Session)

    会话Cookie及session的关系(Cookie & Session) 在通常的使用中,我们只知道session信息是存放在服务器端,而cookie是存放在客户端.但服务器如何使用sess ...

  2. 会话技术cookie和session详解

    什么是会话 会话可简单理解为:用户开一个浏览器,点击多个超链接,访问服务器多个web资源,然后关闭浏览器,整个过程称之为一个会话. 会话技术解决了什么问题 每个用户与服务器进行交互的过程中,各自会有一 ...

  3. Django详解之四、cookie和session

    一.使用背景 思路 简单的后台管理:对人员的管理 1. 登录注册 2. 老师 班级管理 学院管理 3. 增删改查 开发: 1. 定义数据库表结构 a) 表结构关系 i. class classes(m ...

  4. Network | Cookie and Session

    Cookies are arbitrary pieces of data chosen by the web server and sent to the browser. The browser r ...

  5. django上课笔记4-复习数据库操作-复习模板-Seccion-详细cookie和session的区别

    一.复习数据库操作 字段类型 字符串 EmailField(CharField): IPAddressField(Field) URLField(CharField) SlugField(CharFi ...

  6. 理解Cookie和Session机制(转)

    目录[-] Cookie机制 什么是Cookie 记录用户访问次数 Cookie的不可跨域名性 Unicode编码:保存中文 BASE64编码:保存二进制图片 设置Cookie的所有属性 Cookie ...

  7. 理解Cookie和Session机制

    转载: 理解Cookie和Session机制 会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话.常用的会话跟踪技术是Cookie与Session.Cookie通过在客户端记录 ...

  8. Cookie和Session(session过程和设置进程外session)

    cookie 和  session 的区别 cookie 是保存在客户端上的一种机制   而session 是保存在服务端的一种机制 cookie的理解: 打个简单的比方,一个人生病了去A医院看病,回 ...

  9. 转:cookie和session(一)——原理

    文章来自于:http://blog.csdn.net/half1/article/details/21645545 一.cookie和session是什么?   cookie是服务器留在客户端中的小文 ...

随机推荐

  1. 在EXE和DLL中,FindResource的区别

    转载:https://blog.csdn.net/ithzhang/article/details/7995102 在EXE和DLL中,FindResource的区别 以下的代码在EXE中,执行无误. ...

  2. Spring cloud微服务安全实战-5-9实现基于session的SSO(Token有效期)

    token的有效期 会出现一种情况session有效期还没到.但是token过期了. 用户登陆着,但是token失效了 没法访问服务了. 刷新令牌要和clientId和ClientSecret一起用, ...

  3. 算法习题---4-10洪水(UVa815)

    一:题目 有一个n*m(<=n,m<=)的网格,每个格子都是边长为10米的正方形,网格四周是无限大的墙壁.输入每个格子的海拔高度,以及网格内雨水的总体积,输出水位的海拔高度以及有多少百分比 ...

  4. HTTP1.1新增了五种请求方法:OPTIONS、PUT、PATCH、DELETE、TRACE 、 CONNECT

    200 (成功) 服务器已成功处理了请求. 通常,这表示服务器提供了请求的网页. 201 (已创建) 请求成功并且服务器创建了新的资源. 202 (已接受) 服务器已接受请求,但尚未处理. 203 ( ...

  5. 图片缩放——利用layui的滑块

    @layui官网文档.@参考博客 参考博客中能实现,但是效果差强人意,在前辈的基础上进行了改造,并支持了动态多图列表 <%@ page language="java" con ...

  6. 【Leetcode_easy】832. Flipping an Image

    problem 832. Flipping an Image solution1: class Solution { public: vector<vector<int>> f ...

  7. DeviceEventEmitter React-Native 发送和接受消息(事件监听器)

    A页面注册通知: import {DeviceEventEmitter} from 'react-native'; //… //调用事件通知 DeviceEventEmitter.emit('xxxN ...

  8. PHP使用glob方法遍历文件夹下所有文件

    PHP使用glob方法遍历文件夹下所有文件 遍历文件夹下所有文件,一般可以使用opendir 与 readdir 方法来遍历.<pre><?php$path = dirname(__ ...

  9. ABP中的AutoMapper

    在我们的业务中经常需要使用到类型之间的映射,特别是在和前端页面进行交互的时候,我们需要定义各种类型的Dto,并且需要需要这些Dto和数据库中的实体进行映射,对于有些大对象而言,需要赋值太多的属性,这样 ...

  10. [C++] 二叉树计算文件单词数

    目录 前置技能 构造和遍历二叉树 文件的打开.读取和写入 需求描述 读取文件 构建二叉树 格式化输入输出 具体实现 main.cpp binarytree.h binarytree.cpp 使用二叉树 ...