Cookie

什么是Cookie?

Cookie是指某些网站为了辨别用户身份而存储在用户本地终端上的数据(通常经过加密)。

为什么要辨别用户身份?

很多时候Web应用是有状态的,需要保存用户登录的身份信息,一般的购物网站就是如此。

然而,服务器使用HTTP与Web应用进行信息交流。HTTP协议是无状态的协议,无状态协议是指web应用每次向服务器发送的请求都是独立的HTTP连接。Web应用和服务器会在第一个请求完成后关闭连接通道,第二次请求时重新建立连接。服务器并不区分哪个请求来自哪个客户端,对所有请求都一视同仁,都是单独的连接。

那么问题来了,在访问页面1时执行了登录动作,在访问页面2的时候如何才能告知服务器刚才已经登录过了呢?

答案就是使用Cookie。浏览器和服务器之间有约定-通过使用Cookie技术来维持应用的状态。

Cookie能做什么?

保存用户状态;记录用户行为

Cookie如何管理?

很多网站都会颁发Cookie。Google会给客户端颁发,BaiDu也会颁发。那众多的Cookie是被谁管理的?如何管理?访问Google时是否会带上BaiDu颁发的Cookie呢?

Cookie在客户端由浏览器进行管理。浏览器根据域名来管理Cookie。

Cookie具有不可跨域名性,浏览器可以保证访问Google时只携带Google颁发的Cookie。访问Baidu同理。

不同的域名之间不可以访问或者修改删除对方的Cookie。

Cookie的几个属性

name:Cookie名

value:Cookie值

domain:Cookie所属的域

secure:仅在HTTPS安全通信时发会发送Cookie。

HttpOnly:加以限制,使Cookie不能被JavaScript脚本访问

Expires:Cookie的过期时间,默认值为session,关闭当前会话session就会失效

Max-Age:用来代替expires.Max-Age以秒为单位,为正数时表示Cookie从创建到过期所能存在的时间,在此期间,不论关闭电脑还是浏览器,直至设置时间Cookie才会过期。 未负数时,表示只Cookie只是存储在浏览器内存里,只要关闭浏览器,此Cookie立刻失效。 Max-Age的默认值为-1

操作Cookie

在JavaScript中可以通过document.cookie获取Cookie或设置Cookie。

由于Cookie常用来在客户端和服务器端进行通信,因此一些服务端语言也可以操作Cookie,如PHP。

JavaScript提供的操作Cookie的方法非常有限。


添加Cookie

当前域名下的Cookie信息如下图

document.cookie="acookie=hahhahah"

      再次查看,显示已经添加成功

删除Cookie

删除Cookie的方法有二,一是将该Cookie的值置为空,二是将该Cookie的expires设置为一个过去的时间。

禁止Cookie

为了安全起见,在很多时候会禁止前端访问Cookie,这时设置HttpOnly属性即可。

response.addHeader("Set-Cookie", "uid=112; Path=/; HttpOnly");

Cookie的大小数目

所有浏览器对于Cookie的数目和大小都是有限制的,不同的浏览器之间略有不同。

一般来说,Cookie的数目限制在20个左右,大小限制在4kb上下。

在所有的浏览器中,大小 、数目超过限制会被直接忽略,不会被设置成功。
 

Cookie的应用过程

  1.  客户端第一次请求是没有Cookie信息的
  2.  服务器端收到请求,生成cookie,并保存起来
  3.  在响应报文的首部字段 set-Cookie塞入Cookie,通知客户端保存Cookie
  4.  下次客户端再次往该服务器发送请求时,客户端会自动在请求报文中加入Cookie后发送出去
  5.  服务器端发现客户端发送过来的Cookie后,先去检查是从哪一个客户端发来的连接请求,然后对比服务器上的记录,最后得到之前的状态信息

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值