cookie
* cookie是每个客户身份的通行证,相当于一个身份证
* cookie 特点
* 文件有大小限制:4KB(文件若没有大小限制,比如身份牌的重量是140斤,挂脖子能不能累死?)
* 数量限制:(一般浏览器,限制大概在50条左右)
* 读取有域名限制:不可跨域读取,只能由来自 写入cookie的 同一域名 的网页可进行读取。简单的讲就是,谁写的cookie,谁才有权利读取。
* 时效限制:每个cookie都有时效,最短的有效期是,会话级别:就是当浏览器关闭,那么cookie立即销毁,如果没有指定Cookie的时效,那么默认的时效是:*会话级别*
使用方法
- 使用 JavaScript 读取 Cookie
document.cookie;
- 使用 JavaScript 设置 Cookie
document.cookie="username=xxx; expires=Thu, 18 Dec 2043 12:00:00 GMT";
- 使用 JavaScript 删除 Cookie
document.cookie = "username=; expires=Thu, 01 Jan 1970 00:00:00 GMT";
cookie和session的区别和用法
-
cookie:在网站中,http请求是无状态的。也就是说即使第一次和服务器连接后并且登录成功后,第二次请求服务器依然不能知道当前请求是哪个用户。cookie的出现就是为了解决这个问题,第一次登录后服务器返回一些数据(cookie)给浏览器,然后浏览器保存在本地,当该用户发送第二次请求的时候,就会自动的把上次请求存储的cookie数据自动的携带给服务器,服务器通过浏览器携带的数据就能判断当前用户是哪个了。cookie存储的数据量有限,不同的浏览器有不同的存储大小,但一般不超过4KB。因此使用cookie只能存储一些小量的数据。
-
session:session和cookie的作用有点类似,都是为了存储用户相关的信息。不同的是,cookie是存储在本地浏览器,而session存储在服务器。存储在服务器的数据会更加的安全,不容易被窃取。但存储在服务器也有一定的弊端,就是会占用服务器的资源,但现在服务器已经发展至今,一些session信息还是绰绰有余的。
-
cookie和session结合使用:
web开发发展至今,cookie和session的使用已经出现了一些非常成熟的方案。在如今的市场或者企业里,一般有两种存储方式:
1. 存储在服务端:通过cookie存储一个session_id,然后具体的数据则是保存在session中。如果用户已经登录,则服务器会在cookie中保存一个session_id,下次再次请求的时候,会把该session_id携带上来,服务器根据session_id在session库中获取用户的session数据。就能知道该用户到底是谁,以及之前保存的一些状态信息。这种专业术语叫做server side session。
2. 将session数据加密,然后存储在cookie中。这种专业术语叫做client side session。
- 一周内免登陆
- 商品浏览记录
cookie的封装 (document.cookie)
function setCookie(name, value, iDay) {
var oDate=new Date();
oDate.setDate(oDate.getDate()+iDay); //用来设置过期时间用的,获取当前时间加上传进来的iDay就是过期时间
document.cookie=name+'='+value+';expires='+oDate;
};
function getCookie(name) {
var arr=document.cookie.split('; '); //多个cookie值是以; 分隔的,用split把cookie分割开并赋值给数组
for(var i=0;i<arr[i].length;i++) // 遍历数组
{
var arr2=arr[i].split('='); //原来割好的数组是:user=simon,再用split('=')分割成:user simon 这样可以通过arr2[0] arr2[1]来分别获取user和simon
if(arr2[0]==name) //如果数组的属性名等于传进来的name
{
return arr2[1]; //就返回属性名对应的值
}
return ''; //没找到就返回空
}
};
function removeCookie(name) {
setCookie(name, 1, -1); //-1就是告诉系统已经过期,系统就会立刻去删除cookie
};
可以简单实现的功能:
- 简单购物车的应用
- 照片墙的记录
- 购物车的多条记录保存
掌握cookie 的安全策略
* Cookie具体工作过程描述如下:
1)Web 客户端通过浏览器向 Web 服务器发送连接请求, 通过 HTTP 报文请求行中的 URL 打开某一 Web页面。
2)Web 服务器接收到请求后,根据用户端提供的信息产生一个 Set-Cookies Head
3)将生成的Set-Cookies Header通过 Response Header存放在 HTTP 报文中回传给 Web 客户端,建立一次会话连接。
4)Web 客户端收到 HTTP 应答报文后,如果要继续已建立的这次会话,则将 Cookies 的内容从 HTTP 报文中取出,形成一个 Cookies文本文件储存在客户端计算机的硬盘中或保存 在客户端计算机的内存中。
5)当 Web 客户端再次向 Web 服务器发送连接请求时, Web 浏览器首先根据要访问站点的 U R L 在本地计算机上寻找对应的 Cookies文本文件或在本地计算机的内存中寻找对应的 Cookies 内容。如果找到,则将此 Cookies 内容存放在 HTTP 请求报文中发给 Web 服务器。
6)Web 服务器接收到包含 Cookies 内容的 HTTP 请求后, 检索其 Cookies 中与用户有关的信息,并根据检索结果生成一个客户端所请求的页面应答传递给客户端 。
* COOKIE安全分析
* Cookie 泄漏(欺骗)
cookie在http协议中是明文传输的,并且直接附在http报文的前面,所以只要在网络中加个嗅探工具,获取http包,就可以分析并获得cookie的值。
此时,当我们获取到别人的cookie的值,就产生了一种攻击漏洞,即cookie欺骗。我们将获取到的cookie值加在http请求前,服务器就会把我们当作是该cookie的用户,我们就成功的冒充了其他用户,可以使用其他用户在服务器的资源等。
既然明文cookie不安全,那么我们就使用加密传输cookie。这样即使数据包被截取,cookie也不会被泄漏。把http协议改成加密的https。
在HTTPS也不安全的情况下,我们考虑cookie 自身属性。
Cookie 中有个属性secure,当该属性设置为true时,表示创建的 Cookie 会被以安全的形式向服务器传输,也就是只能在 HTTPS 连接中被浏览器传递到服务器端进行会话验证,如果是 HTTP 连接则不会传递该cookie信息,所以不会被窃取到Cookie 的具体内容。就是只允许在加密的情况下将cookie加在数据包请求头部,防止cookie被带出来。
另一个是 HttpOnly属性,如果在Cookie中设置了"HttpOnly"属性,那么通过程序(JS脚本、Applet等)将无法读取到Cookie信息,这样能有效的防止XSS攻击。
secure属性是防止信息在传递的过程中被监听捕获后信息泄漏,HttpOnly属性的目的是防止程序获取cookie后进行攻击。
* COOKIE防护
1. ”重名检查“
但是这个有难度。因为cookie 时RFC定义的,而修改RFC中的cookie 标准是有困难的。
2. 清理cookie
Cookie是由于便利性而存在的,那么总是在使用后清除cookie,其实就达不到cookie的便利作用了。
3. 不在 Cookies 中存放敏感信息。
这是一个 理想化的思路,其实质就是抛弃 Cookies,但明显违背安全平台的设计思路,不能因为 Cookies 可能存在欺骗攻击而废止它的便利性。
要求
掌握cookie 的封装
掌握cookie跟json的配合
拓展: localStroage
1. 说明
* 浏览器的大小不统一,并且在IE8以上的IE版本才支持localStorage这个属性
* 目前所有的浏览器中都会把localStorage的值类型限定为string类型,这个在对我们日常比较常见的JSON对象类型需要一些转换
* localStorage在浏览器的隐私模式下面是不可读取的
* localStorage本质上是对字符串的读取,如果存储内容多的话会消耗内存空间,会导致页面变卡
* localStorage不能被爬虫抓取到
2. 使用方式
* window.localStorage.setItem()
* window.localStorage.clear()
* window.localStorage.removeItem("name")
* window.localStorage.getItem()
* window.localStorage.name
* window.localStorage.key(0)