Cookie,Session和Token

这边参考这几篇博文,去了解:
http://www.cnblogs.com/moyand/p/9047978.html
https://cloud.tencent.com/developer/news/247610
https://blog.csdn.net/z_erduo/article/details/81076699

简单粗暴的理解cookie,session和token这三个变量,都是用来表示 用户在使用浏览器发送请求给服务器端的时候不是 无名人士,而是有头有脸的人,都是有身份的,所以在后边再次发送请求过来的时候,服务器端要有眼力见,不要再 有眼不识泰山,浪费时间,还耗用自己的资源,要给人方便懂不?

在了解 Cookie ,Session和 Token之前,先来了解一下为什么要使用它们?
因为在之前的 浏览器发送请求访问服务器之前,只是简单地浏览页面,每一次的都是独立的,所以 HTTP基本是能够保证满足用户需求的。但是随着交互的Web的出现,需要用户进行登录等操作。要进行会话管理,要区分不同的用户等等。

但是 HTTP是 无状态协议。简单的说,当你浏览了一个页面,然后转到同一个网站的其他页面,服务器无法认识到这是同一个浏览器在访问同一网站。每一次的访问都是没有关系的。
所以 为了保证 服务器能够识别 这是同一个用户在同一个浏览器上访问同一个网站,服务器需要记录 用户的身份。

【Cookie】:cookie是存储于访问者的计算机中的变量,可以让我们用同一个浏览器访问同一个域名的时候共享数据。
【Cookie 是一个简单到爆的想法】:当访问一个页面的时候,服务器在下行 HTTP 报文中,命令浏览器存储一个字符串(set-cookie); 浏览器再访问同一个域的时候,将把这个字符串携带到上行HTTP 请求中。第一次访问一个服务器,不可能携带 cookie。 必须是服务器得到这次请求,在下行响应报头中,携带 cookie 信息,此后每一次浏览器往这个服务器发出的请求,都会携带这个 cookie。

【Cookie的特点】
● cookie 保存在浏览器本地;
● 正常设置的 cookie 是不加密的,用户可以自由看到;
● 用户可以删除 cookie,或者禁用它;
● cookie 可以被篡改;
● cookie 可以用于攻击;
● cookie 存储量很小。未来实际上要被 localStorage 替代,但是后者 IE9 兼容。

【Session】:session 是另一种记录客户状态的机制,不同的是 Cookie 保存在客户端浏览器中,而 session 保存在服务器上
【Session的工作流程】:
当浏览器访问服务器并发送第一次请求时,服务器端会创建一个 session 对象,生成一个类似于key,value 的键值对,然后将 key(cookie)返回到浏览器(客户)端,浏览器下次再访问时,携带 key(cookie),找到对应的 session(value)。 客户的信息都保存在 session 中。
【Session的用途】:
(1)session 运行在服务器端,当客户端第一次访问服务器时,可以将客户的登录信息保存。
(2)当客户访问其他页面时,可以判断客户的登录状态,做出提示,相当于登录拦截。
(3)session 可以和 Redis 或者数据库等结合做持久化操作,当服务器挂掉时也不会导致某些客户信息(购物车)丢失。

【Cookie和Session的区别】
1、cookie 数据存放在客户的浏览器上,session 数据放在服务器上。
2、cookie 不是很安全,别人可以分析存放在本地的 COOKIE 并进行 COOKIE 欺骗
考虑到安全应当使用 session。
3、session 会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能
考虑到减轻服务器性能方面,应当使用 COOKIE。
4、单个 cookie 保存的数据不能超过 4K,很多浏览器都限制一个站点最多保存 20 个 cookie。

【session使用暴露的问题】:
(1)Session:每次认证用户发起请求时,服务器需要去创建一个记录来存储信息。当越来越多的用户发请求时,内存的开销也会不断增加
(2)可扩展性:在服务端的内存中使用Session存储登录信息,伴随而来的是可扩展性问题。
(3)CORS(跨域资源共享):当我们需要让数据跨多台移动设备上使用时,跨域资源的共享会是一个让人头疼的问题。在使用Ajax抓取另一个域的资源,就可以会出现禁止请求的情况。
(4)CSRF(跨站请求伪造):用户在访问银行网站时,他们很容易受到跨站请求伪造的攻击,并且能够被利用其访问其他的网站。

在Web领域基于Token的身份验证随处可见。在大多数使用Web API的互联网公司中tokens 是多用户下处理认证的最佳方式。
【Token的特点】:
(1)无状态、可扩展
(2)支持移动设备
(3)跨程序调用
(4)安全
【Token的身份验证过程】:用户通过 用户名和密码登录,服务器通过验证之后 对其用户名进行加密,生成Token,返回给浏览器端,服务器不需要保存用户登录信息,浏览器端下次再向同一个域发送请求的时候必须携带Token,这样服务器只需要使用同样的加密算法对用户名进行加密,将生成的Token,和用户携带的Token进行比较,结果一致就通过验证,不一致则返回错误代码。

猜你喜欢

转载自blog.csdn.net/Zhou07182423/article/details/87916213