Cookie和Session知识点
Posted 康小庄
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Cookie和Session知识点相关的知识,希望对你有一定的参考价值。
Cookie
Cookie概念(来源百度百科)
Cookie,有时也用其复数形式 Cookies。类型为“小型文本文件”,是某些网站为了辨别用户身份,进行Session跟踪而储存在用户本地终端上的数据(通常经过加密),由用户客户端计算机暂时或永久保存的信息
为什么使用Cookie?
HTTP Cookie
(也叫Web Cookie或浏览器Cookie)是服务器发送到用户浏览器保存在本地的数据
,会在浏览器下次向同一
服务器再次发起请求时携带并发送到服务器上。用来告知服务器两个请求是否来自同一个浏览器,例如,保持用户的登录状态。Cookie
是使于无状态的HTTP协议记录稳定的状态信息
成为了可能。
Cookie主要用于三个方面
- 会话状态管理(用户登录状态,其他需要记录保持的信息)
- 个性化设置(用户自定义的主题,设置等)
- 浏览器行为跟踪(跟踪用户行为并进行分析)
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的缺点
- 数量受到限制,一个浏览器最多创建的Cookie数量为300个,且每个不能超过4KB,每个Web站点能设置的Cookie总数不能超过20个
- 安全性无法得到保障
- 浏览器可以使用禁用Cookie
Cookie的应用场景
- 对安全性不高的场景
- 不需要大量存储数据
- 用来做客户端与服务器之间的状态保持
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 ID
,Session 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知识点的主要内容,如果未能解决你的问题,请参考以下文章