HTTP-Cookie

Cookie

1.诞生

由于http是无状态的,每个请求和响应是相互独立的。在实际的应用中,比如用户的登录信息,服务器 需要校验用户是否登录;用户在购物网站时,先选中商品,点击付款,再输入密码等一系列操作是相关的,如何将这些在技术上不相关的HTTP请求联系起来?  为解决这些问题,网景公司的一位前员工,提出了cookie技术。

cookie,通常被称为浏览器cookie,http cookie,网站cookie。它不是软件,它只是一段文本。在http请求的时候,默认带上这一段文本,服务器对cookie进行校验。 cookie是在第一次请求的时候,服务器在返回时set-cookie,客户端在下一次请求的时候会带上cookie。

 

2.分类

1.     Session Cookie

Cookie只在会话期间有效果,当浏览器关闭时被删除。创建办法是在set-cookie时,不设置Expires。

2.     Persistent Cookie

持久cookie,cookie内容会被写入文件,当设置cookie属性max-age为1个月时,则在这一个月内请求相关的URL时都会带上这个 cookie。记录用户初始化或者自定义化的信息。

3.     Secure Cookie

安全cookie是在使用https时,cookie在传递过程中是加密的,降低了cookie内容直接暴露在黑客面前被盗取的风险。

4.     HttpOnly Cookie

httponly cookie只能在http(https)上传递,即对客户端脚本语言如js无效,避免了跨站攻击时候js偷取cookie情况。

5.     3-rd Cookie

第一方cookie是种植在浏览器地址栏的域名下的,第三方cookie是属于 非浏览器地址栏的域名的cookie。 比如某个cookie是位于abc.com域名的,但是在访问xyz.com时也带上了该cookie,则对于xyz.com来说,这就是个第三方cookie。这种场景常用于alibaba之内的广告 服务商,用户获取用户的的访问记录等。

6.     Super Cookie

超级cookie是指设置在顶级域名下的cookie,如在.com、.cn设置的cookie,这种情况下,只要访问任何一个com、cn网站时,都会带上这个cookie。

7.     Zombie Cookie

僵死cookie是指那些删除后,自动创建 的cookie。通过存储cookie的内容到多个地方,比如 Flash Local shared objectHTML5 Web storage,或者其他客户端端甚至服务端,当没有检测到cookie,就会从其他存储地获取数据,重新创建cookie。

3.用途

1.     会话管理

用来管理会话,通常是服务器返回一个session标示,用以标示客户端。

2.     个性化信息

cookie可以用来记住用户信息。比如登陆时,服务器可以返回一个带有用户名、密码等信息的cookie,用户下次就可以自动登录。 Many websites use cookies for personalization based on the user's preferences. Users select their preferences by entering them in a web form and submitting the form to the server. The server encodes the preferences in a cookie and sends the cookie back to the browser. This way, every time the user accesses a page on the website, the server can personalize the page according to the user's preferences. For example, the Google search engine once used cookies to allow users (even non-registered ones) to decide how many search results per page they wanted to see. Also, DuckDuckGo uses cookies to allow users to set the viewing preferences like colors of the web page。

3.     记录用户的信息

追踪cookie可以记录用户的浏览习惯。

4.Cookie实现

cookie要求浏览器必须实现以下条件:

1.    在大小上支持4096 bytes的cookie

2.    每个域上至少支持50个cookie

3.    总共至少支持3000个cookie

4.1结构


 cookie consists of the following components:

1.   Name

2.   Value

3.   Zero or more attributes (name/value pairs). Attributes store information such as the cookie’s expiration, domain, and flags (such as Secure and HttpOnly).

4.2属性

cookie的属性不会被发送到服务端,只是交给浏览器来决定什么时候删除cookie或其他操作。

Domain and path

这个属性用来指定cookie的范围。如果path和domain属性没有填写,浏览器会以默认的方式来操作cookie,不同浏览器操作方式可能会不一样。 通常的操作,浏览器会将host-only作为cookie的默认操作,即只对当前的域名的请求带上cookie,不对子域名带上cookie。如果设置path和domain属性,则所有的对子域名的请求也会带上cookie。

Set-Cookie: LSID=DQAAAK…Eaem_vYg; Path=/accounts; Expires=Wed, 13 Jan 2021 22:23:01 GMT; Secure; HttpOnly
Set-Cookie: HSID=AYQEVn…DKrdst; Domain=.foo.com; Path=/; Expires=Wed, 13 Jan 2021 22:23:01 GMT; HttpOnly
Set-Cookie: SSID=Ap4P…GTEq; Domain=foo.com; Path=/; Expires=Wed, 13 Jan 2021 22:23:01 GMT; Secure; HttpOnly

第一个LSID-cookie没有设置domain,设置了path,就是告诉浏览器只有请求该域名的/accounts资源时,带上cookie。 第二个HSID和第三个SSID设置了domain和path “/”,就是告诉浏览器器访问foo.com的任何资源,都带上这两个cookie。

Expires and Max-Age

Expires属性指定了浏览器什么时候删除cookie,如果该属性没有设置,cookie会在浏览器关闭的时候 被清除。另外,相对于浏览器收到cookie的时间,Max-Age属性可用于将cookie的到期时间设置为秒间隔。

Secure and HttpOnly

这两个属性并没有相关联的值,名称就已表明了其行为。Secure属性意味着cookie被用于加密传输,但是,如果连接并非是安全连接https,cookie仍然会被第三方拦截。HttpOnly属性用于告诉浏览器不要暴露给channels,除了http(https)。

5.更多

了解更多cookie比如浏览器相关,Cookie窃取及会话劫持(hijacking)等可以查看如下网址:

https://en.wikipedia.org/wiki/HTTP_cookie(原文)

https://www.jianshu.com/p/1e28fe8125dc(中文翻译版)

 

转载于:https://my.oschina.net/u/877337/blog/1789726

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值