Cookie和Session知识点

Posted 康小庄

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Cookie和Session知识点相关的知识,希望对你有一定的参考价值。

Cookie

Cookie概念(来源百度百科)

cookie(储存在用户本地终端上的数据)百度百科

Cookie,有时也用其复数形式 Cookies。类型为“小型文本文件”,是某些网站为了辨别用户身份,进行Session跟踪而储存在用户本地终端上的数据(通常经过加密),由用户客户端计算机暂时或永久保存的信息

为什么使用Cookie?

HTTP Cookie(也叫Web Cookie或浏览器Cookie)是服务器发送到用户浏览器保存在本地的数据,会在浏览器下次向同一服务器再次发起请求时携带并发送到服务器上。用来告知服务器两个请求是否来自同一个浏览器,例如,保持用户的登录状态。Cookie是使于无状态的HTTP协议记录稳定的状态信息成为了可能。


Cookie主要用于三个方面

  1. 会话状态管理(用户登录状态,其他需要记录保持的信息)
  2. 个性化设置(用户自定义的主题,设置等)
  3. 浏览器行为跟踪(跟踪用户行为并进行分析)

Cookie的组成

Cookie是一段不超过4KB的小型文本数据,由一个名称(Name)、一个值(Value)和其它几个用于控制Cookie有效期、安全性、使用范围的可选属性组成

Name/Value属性

设置Cookie的名称及其对应的值,对于认证Cookie,Value值包括Web服务器所提供的访问令牌

Expires属性

  • 设置Cookie的生存期,有两种存储类型的Cookie,会话性和持久性。Expires属性缺省时,为会话性Cookie,仅保存在客户端内存中,并在用户关闭浏览器失效
  • 持久性Cookie会保存在用户的硬盘中,直至生存期结束或用户手动结束才会失效

Path属性

定义Web站点可以访问该Cookie的目录

Domain属性

指定可以访问该Cookie的Web站点或域

Cookie 机制并未遵循严格的同源策略,允许一个子域可以设置或获取其父域的 Cookie。当需要实现单点登录方案时,Cookie 的上述特性非常有用,然而也增加了 Cookie受攻击的危险,比如攻击者可以借此发动会话定置攻击。

Secure属性

指定是否使用HTTPS安全协议发送Cookie。使用HTTPS安全协议,可以保护Cookie在浏览器和Web服务器间的传输过程中不被窃取和篡改

HTTP Only属性

用于防止客户端脚本通过document.cookie属性访问Cookie,有助于保护Cookie不被跨站脚本攻击窃取或篡改。但是,HTTPOnly的应用仍存在局限性,一些浏览器可以阻止客户端脚本对Cookie的读操作,但允许写操作

Cookie的缺点

  1. 数量受到限制,一个浏览器最多创建的Cookie数量为300个,且每个不能超过4KB,每个Web站点能设置的Cookie总数不能超过20个
  2. 安全性无法得到保障
  3. 浏览器可以使用禁用Cookie

Cookie的应用场景

  • 对安全性不高的场景
  • 不需要大量存储数据
  • 用来做客户端与服务器之间的状态保持

Session

Session概念(来源百度百科)

session(计算机术语)百度百科

Session:在计算机中,尤其是在网络应用中,称为“会话控制”。Session对象存储特定用户会话所需的属性及配置信息。这样,当用户在应用程序的Web页之间跳转时,存储在Session对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。当用户请求来自应用程序的 Web页时,如果该用户还没有会话,则Web服务器将自动创建一个 Session对象。当会话过期或被放弃后,服务器将终止该会话。Session 对象最常见的一个用法就是存储用户的首选项

Session工作原理(和Cookie的配合)

Cookie保存Session的id,保存这个Session ID的方式可以用Cookie

Session机制是一种服务端的机制

  • 当程序需要为某个客户端的请求创建一个Session时,服务器首先检查这个客户端的请求是否包含了一个Session的标识(Session ID),如果已经包含则说明以前为此客户端创建过Session,服务器就按照Session ID把对应的Session检索出来使用(检索不到,会新建一个)

  • 当客户端请求不包含Session ID,则为此客户端创建Session并且生成一个与此Session相对应的Session IDSession ID的值应该是一个不会重复,不容易找到规律的字符串。这个Session ID将在本次响应中返回给客户端保存,保存采用Cookie方式,这样在交互过程中浏览器可以自动的按照规则把标识发给服务器,但是Cookie可以被人为禁止,必须有其他机制以便在Cookie禁止时扔能够把Session ID传递回给服务器


Cookie和Session的区别

Cookie 和 Session 有什么不同?

  • 作用范围不同,Cookie 保存在客户端(浏览器),Session 保存在服务器端。
  • 存取方式的不同,Cookie 只能保存 ASCII,Session 可以存任意数据类型,一般情况下我们可以在 Session 中保持一些常用变量信息,比如说 UserId 等。
  • 有效期不同,Cookie 可设置为长时间保持,比如我们经常使用的默认登录功能,Session 一般失效时间较短,客户端关闭或者 Session 超时都会失效。
  • 隐私策略不同,Cookie 存储在客户端,比较容易遭到不法获取,早期有人将用户的登录名和密码存储在 Cookie 中导致信息被窃取;Session 存储在服务端,安全性相对 Cookie 要好一些。
  • 存储大小不同, 单个 Cookie 保存的数据不能超过 4K,Session 可存储数据远高于 Cookie

参考资料

以上是关于Cookie和Session知识点的主要内容,如果未能解决你的问题,请参考以下文章

cookie和session

Python爬虫知识点——Session与Cookie

session和cookie知识点总结

Cookie和Session知识点

session和cookie的基本知识

基础知识《十二》一篇文章理解Cookie和Session