cookie相关

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。

  1. 一周内免登陆
  2. 商品浏览记录
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
};

可以简单实现的功能:

  1. 简单购物车的应用
  2. 照片墙的记录
  3. 购物车的多条记录保存
掌握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)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值