详解Cookie纪要
参考文档链接:http://mp.weixin.qq.com/s?__biz=MzAxODE2MjM1MA==&mid=2651552892&idx=1&sn=126a1d328c76b45f83925cb7032952d0&chksm=8025abbdb75222abb47c70dd5c6e536c30c00b566b73b18604ad4b40eec2e7e2344ebdd842b9&mpshare=1&scene=23&srcid=1024mKqR5M1pROm01X6hroXC#rd
背景
在HTTP协议的定义中,采用了一种机制来记录客户端和服务器交互的信息,这种机制称为cookie,cookie规范了服务器和客户端交互信息的格式、生存期、使用范围、安全性。
在Javascript中通过document.cookie来读取或设置这些信息。由于cookie多用于客户端和服务器之间进行通信,所以除了javascript以外,服务器语言也可以读取cookie
Cookie详解
Cookie在远程浏览器存储数据并以此跟踪和识别用户的机制,从实现上说,Cookie是存储在客户端上的一小段数据,浏览器*(客户端)通过HTTP协议和服务器进行Cookie交互。
Cookie独立于语言存在,严格地说,Cookie并不是由PHP,Java等语言实现的,而是这些语言对cookie进行间接操作,即发送HTTP指令,浏览器收到指令便操作Cookie并返回服务器。PHP可以使用setCookie()或setawcookie()函数设置Cookie。setCookie()最后一个参数HttpOnly设置后,JavaScript就无法读取到这个Cookie。
设置Cookie是需要注意:1函数有返回值,false失败,true成功2PHP设置Cookie不能立即生效要等到下一个页面才能看到(Cookie从服务器传给浏览器,下个页面浏览器才能把设置的Cookie传回给服务器)如果是JavaScript设置的,是立即生效的;3Cookie没有显示的删除函数,可以设置expire过期时间,自动触发浏览器删除机制。
Cookie是HTTP的一部分,即现发送或请求Cookie,才是data域,setCookie()等函数必须在数据之前调用,这个header()函数是相同的。不过也可以舒勇输出函数延迟脚本的输出,直到设置好所有的Cookie和其他的HTTP标头
Cookie通常用来存储一些不是敏感的信息,或者进行登录控制,也可以记住用户名,记住免密码登录、防止刷票。每个域名下允许Cookie是有限制的,一个域名的每个cookie限制4KB键值对形式存储
还有一种Cookie是Flash创建的,成为Flash Shard Object,又称Flash Cookie,即使清空浏览器所有隐私数据,这类顽固的Cookie还会存在硬盘上,因为它只受Flash管理,很多网站采用这种技术识别用户。
Cookie跨域,主要是为了统一应用平台,实现单点登录;需要使用P3P(Platform for Privacy Preferences)通过P3P使用户自己可以指定浏览器的隐私策略,达到存储第三方Cookie的目的,只需要在响应用户请求时,在HTTP的头信息中增加关于P3P的配置信息就可以了。
Cookie格式
Cookie保存信息是文本信息,在客户端和服务器交互过程中,cookie信息被附加在HTTP消息头中传递,cookie信息有键、值对组成
列:
Set-Cookie: key = value; Path=/
Cookie中存放的信息包含cookie本身属性和用户自定义属性,一个cookie只能包含一个自定义键、值对。Cookie本身属性有”Comment” 、”Domain”、”Max-Age”、”Path”、”Secure”、”Version”。
Comment属性是cookie产生对该cookie描述
Domain属性定义可访问的cookie域名,对一些网站,如果希望cookie可以在+子网站中共享,可以使用该属性。例如设置Domain为 .bigsite.com ,则sub1.bigsite.com和sub2.bigsite.com都可以访问已保存在客户端的cookie,这时还需要将Path设置为/。
Max-Age 属性定义cookie的有效时间,用秒计数,当超过有效期后,cookie的信息不会从客户端附加在HTTP消息头中发送到服务端。
Path 属性定义网站上可以访问cookie的页面的路径,缺省状态下Path为产生cookie时的路径,此时cookie可以被该路径以及其子路径下的页面访问;可以将Path设置为/,使cookie可以被网站下所有页面访问。
Secure 属性值定义cookie的安全性,当该值为true时必须是HTTPS状态下cookie才从客户端附加在HTTP消息中发送到服务端,在HTTP时cookie是不发送的;Secure为false时则可在HTTP状态下传递cookie,Secure缺省为false。
Version 属性定义cookie的版本,由cookie的创建者定义。
Cookie创建
创建cookie时如果不指定生存有效时间,则cookie只在浏览器关闭前有效,cookie会在服务器端和客户端传输,但是不会保存在客户机的磁盘上,打开新的浏览器将不能获得原先创建的cookie信息。
Cookie信息保存在本地时会保存到当前登录用户专门目录下,保存的cookie文件名中会包含创建cookie所在页面网站的域名,当浏览器再次连接该网站时,会从本机cookie存放目录下选出该网站的有效cookie,将保存在其中的信息附加在HTTP消息头中发送到服务器端,服务器端程序就可根据上次保存在cookie的信息为访问客户提供“记忆”或个性化服务。
Cookie除了可以在服务器端创建外,也可以在客户端的浏览器中用客户端脚本(如javascript)创建。客户端创建的cookie的性质和服务器端创建的cookie一样,可以保存在本地,也可以被传送到服务器端被服务器程序读取。
Cookie 基础知识
cookie 是有大小限制的,大多数浏览器支持最大为 4096 字节的 Cookie
由于 cookie 最终都是以文件形式存放在客户端计算机中,所以查看和修改 cookie 都是很方便的,这就是为什么常说 cookie 不能存放重要信息的原因。
每个 cookie 的格式都是这样的:cookieName = Vaue;名称和值都必须是合法的标示符。
cookie 是存在 有效期的。在默认情况下,一个 cookie 的生命周期就是在浏览器关闭的时候结束。如果想要 cookie 能在浏览器关掉之后还可以使用,就必须要为该 cookie 设置有效期,也就是 cookie 的失效日期。
cookie 有域和路径这个概念。域就是domain的概念,因为浏览器是个注意安全的环境,所以不同的域之间是不能互相访问 cookie 的(当然可以通过特殊设置的达到 cookie 跨域访问)。路径就是routing的概念,一个网页所创建的 cookie 只能被与这个网页在同一目录或子目录下得所有网页访问,而不能被其他目录下得网页访问
其实创建cookie的方式和定义变量的方式有些相似,都需要使用 cookie 名称和 cookie 值。同个网站可以创建多个 cookie ,而多个 cookie 可以存放在同一个cookie 文件中。
cookie 存在两种类型:①:你浏览的当前网站本身设置的 cookie ②来自在网页上嵌入广告或图片等其他域来源的 第三方 cookie (网站可通过使用这些 cookie 跟踪你的使用信息)
cookie 有两种清除方式:①:通过浏览器工具清除 cookie (有第三方的工具,浏览器自身也有这种功能) ②通过设置 cookie 的有效期来清除 cookie.注:删除 cookie 有时可能导致某些网页无法正常运行。
浏览器可以通过设置来接受和拒绝访问 cookie。出于功能和性能的原因考虑,建议尽量降低 cookie 的使用数量,并且要尽量使用小 cookie。
Cookie的使用
服务器端cookie的创建和再次读取功能通常由服务器端编程语言实现,客户端cookie的保存、读取一般由浏览器来提供,并且对cookie的安全性方面可以进行设置,如是否可以在本机保存cookie。
与cookie类似的另一个概念是会话(Session),会话一般是记录客户端和服务器端从客户端浏览器连接上服务器端到关闭浏览器期间的持久信息。会话一般保存在内存中,不保存到磁盘上。会话可以通过cookie机制来实现,对于不支持cookie的客户端,会话可以采用URL重写方式来实现。可以将会话理解为内存中的cookie。
Cookie 基本操作
对于 Cookie 得常用操作有,存取,读取,以及设置有效期;具体可以参照 JavaScript 操作 Cookie 一文;但,近期在前端编码方面,皆以Vue为冲锋利器,所以就有用到一款插件 vue-cookie,其代码仅30行,堪称精妙,读取操作如下:
set: function (name, value, days) {
var d = new Date;
d.setTime(d.getTime() + 24*60*60*1000*days);
window.document.cookie = name + "=" + value + ";path=/;expires=" + d.toGMTString();
},
get: function (name) {
var v = window.document.cookie.match('(^|;) ?' + name + '=([^;]*)(;|$)');
return v ? v[2] : null;
},
delete: function (name) {
this.set(name, '', -1);
}
cookie 域概念
路径能解决在同一个域下访问 cookie 的问题,咱们接着说 cookie 实现同域之间访问的问题。语法如下:
document.cookie = “name=value;path=path;domain=domain“
一定的是同域之间的访问,不能把domain的值设置成非主域的域名。
session
Session即回话,指一种持续性的、双向的连接。Session与Cookie在本质上没有区别,都是针对HTTP协议的局限性而提出的一种保持客户端和服务器间保持会话连接状态的机制。Session也是一个通用的标准,但在不同的语言中实现有所不同。针对Web网站来说,Session指用户在浏览某个网站时,从进入网站到浏览器关闭这段时间内的会话。由此可知,Session实际上是一个特定的时间概念。
Session通过一个称为PHPSESSID的Cookie和服务器联系。Session是通过sessionID判断客户端用户的,即Session文件的文件名。sessionID实际上是在客户端和服务端之间通过HTTP Request 和 HTTP Response传来传去。sessionID按照一定的算法生成,必须包含在 HTTP Request 里面,保证唯一性和随机性,以确保Session的安全。如果没有设置 Session 的生成周期, sessionID存储在内存中,关闭浏览器后该ID自动注销;重新请求该页面,会重新注册一个sessionID。如果客户端没有禁用Cookie,Cookie在启动Session回话的时候扮演的是存储sessionID 和 Session 生存期的角色。Session过期后,PHP会对其进行回收。
session与cookie的区别:
1,session 在服务器端,cookie 在客户端(浏览器)
2,session 存在在服务器的一个文件里(默认),不是内存
3,session 的运行依赖 session id,而 session id 是存在 cookie 中的,也就是说,如果 浏览器禁用了 cookie ,同时 session 也会失效(当然也可以在 url 中传递)
4,session 可以放在 文件,数据库,或内存中都可以。
5,用户验证这种场合一般会用 session
因此,维持一个会话的核心就是客户端的唯一标识,即 session id
所以,总结一下:
Session是在服务端保存的一个数据结构,用来跟踪用户的状态,这个数据可以保存在集群、数据库、文件中;
Cookie是客户端保存用户信息的一种机制,用来记录用户的一些信息,也是实现Session的一种方式。
详解Cookie纪要的更多相关文章
- 详解 Cookie 纪要(vue.cookie,jquery.cookie简化)
今天看到一篇cookie的文章,写的特别详细,感谢 晚晴幽草轩 的分享,原文链接http://www.jeffjade.com/2016/10/31/115-summary-of-cookie/ 原文 ...
- JS 详解 Cookie、 LocalStorage 与 SessionStorage-转载
记录一下这些知识,有时候用到会忘记,对原文作者表达感谢. 附上原文链接:JS 详解 Cookie. LocalStorage 与 SessionStorage 基本概念 Cookie Cookie 是 ...
- JS 详解 Cookie、 LocalStorage 与 SessionStorage
基本概念 Cookie Cookie 是小甜饼的意思.顾名思义,cookie 确实非常小,它的大小限制为4KB左右.它的主要用途有保存登录信息,比如你登录某个网站市场可以看到"记住密码&qu ...
- 愿奴胁下生双翼——— 详解cookie和session
cookie和session都是基于web服务器的,不同的是cookie存储在客户端而session存储在服务器. 当用户浏览网站时,web服务器会在浏览器上存储一些当前用户的相关信息,在本地Web客 ...
- 第139天:详解cookie、 sessionStorage 和localStorage
1.cookie:存储在用户本地终端上的数据.有时也用cookies,指某些网站为了辨别用户身份,进行session跟踪而存储在本地终端上的数据,通常经过加密.一般应用最典型的案列就是判断注册用户是否 ...
- 详解 Cookie 和 Session 关系和区别
在技术面试中,经常被问到“说说Cookie和Session的区别”,大家都知道,Session是存储在服务器端的,Cookie是存储在客户端的,然而如果让你更详细地说明,你能说出几点?今天个推君就和大 ...
- 详解cookie与session的区别,讲得最透彻的一篇文章
在PHP面试中 经常碰到请阐述session与cookie的区别与联系,以及如何修改两者的有效时间. 大家都知道,session是存储在服务器端的,cookie是存储在客户端的,session依赖于c ...
- 详解Cookie、LocalStorage、SessionStorage
不管是笔试还是面试相信大家都会经常遇到问Cookie.LocalStorage.SessionStorage 这三个不同的,什么不说先上一波图先: 针对他们大小之分应用场景也有不同: 因为考虑到每个 ...
- 详解Cookie、Session和缓存
1 Cookie和Session Cookie和Session都为了用来保存状态信息,都是保存客户端状态的机制,它们都是为了解决HTTP无状态的问题而所做的努力. Session可以用Cookie来实 ...
随机推荐
- requirejs源码分析
- git 恢复到旧版本命令
1.第一步:找到你想恢复到的版本号:可以在git提交日志中查看-> 找到版本号,复制下来,在git项目根目录下打开git命令窗口: 输入:git reset --hard xxxxxxxxxxx ...
- ASP.NET 三级联动
三级联动就是用三个下拉列表框DropDownList,每个里面添加相应的东西,在第一个列表框中选择一个值,第二三个列表框都会根据第一个选择进行相应的变化,在第二个列表框中选择一个值,第三个列表框也会根 ...
- SPSS-判别分析
判别分析 判别分析是一种有效的对个案进行分类分析的方法.和聚类分析不同的是,判别分析时组别的特征已知. 定义:判别分析先根据已知类别的事物的性质,利用某种技术建立函数式,然后对未知类别的新事物进 行判 ...
- 2-glance 部署
1. mysql 创建数据库和用户 create database glance; grant all privileges on glance.* to 'glance'@'localhost' i ...
- canvas元素绘制太极图
<!DOCTYPE html><html><head> <title>canvas example</title> <meta cha ...
- iview 表单验证
<!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>& ...
- Eclipse git 冲突合并
Eclipse有一个git的插件叫EGit,用于实现本地代码和远程代码对比.合并以及提交.但是在本地代码和远程代码有冲突的时候,EGit的处理方案还是有点复杂.今天就彻底把这些步骤给理清楚,并公开让一 ...
- url中传递中文参数时的转码与解码
URL传递中文参数时的几种处理方式,总结如下: 1.将字符串转码:newString(“xxxxx”.getBytes("iso-8859-1"),"utf-8" ...
- react+webpack+babel环境搭建
[react+webpack+babel环境搭建] 1.react官方文档推荐使用 babel-preset-react.babel-preset-es2015 两个perset. Babel官方文档 ...