详解Cookie、Session

###背景 由于HTTP协议的无状态管理,所以必须要引入一种机制来记录客户端和服务端交互的信息,用来用户识别和状态管理。这种机制就是Cookie,Cookie定义了这些交互信息的格式、过期时间、使用范围...

Cookie在客户端和服务端通信,双方都能对Cookie进行操作,客户端方面,使用javascript通过document.cookie读取或者设置;服务端方面,通过PHP(或者其他后端语言)也可以存取Cookie。 ###Cookie简介

HTTP Cookie(也叫Web cookie或者浏览器Cookie)是保存在浏览器上的一块数据,它会在浏览器下一次发起请求时被携带并发送到服务器上。比较经典的,可以它用来确定两次请求是否来自于同一个浏览器,从而能够确认和保持用户的登录状态。Cookie的使用使得基于无状态的HTTP协议上记录稳定的状态信息成为了可能。

Cookie独立于语言存在,并非是PHP、javascript等语言实现的,而是这些语言对Cookie进行间接操作(通过HTTP指令),PHP调用setcookie,本质是设置HTTP的首部字段Set-Cookie,浏览器收到这条指令后才在硬盘开辟一块区间存储Cookie信息(C:\Users\用户名\AppData\Roaming\Microsoft\Windows\Cookies\和C:\Users\用户\AppData\Local\Microsoft\Windows\Temporary Internet Files\都存有),下次浏览器发请求就会在头部附带cookie字段以及对应的信息。这就是PHP设置完Cookie并不能立即生效的原因,必须等到页面发送下一个请求(如果是javascript设置的,是立即生效的)。 ###Cookie格式 Cookie保存的信息都是文本信息,这些信息以key/value的形式附加在HTTP头部当中进行传递

Set-Cookie: <cookie名称>=<cookie值>

Cookie中存放的信息包含"Name"、"Value" 、"Domain"、"Max-Age/Expires"、"Path"、"Secure"等。

  • Name:cookie的名称
  • Value:cookie的值
  • Domain: cookie的域名,如果希望cookie能够被同站下的子网站访问时,需要用到Domain和Path
  • Max-Age/Expires:cookie的有效期/过期时间
  • Path:定义网站上可以访问Cookie的路径,一般都是设置成'/',网站下其他页面都可访问,如果缺省,path值为定义Cookie时的路径
  • Secure:如果定义成true,那么只有是HTTPS状态下cookie才会从客户端发送至服务端
  • HttpOnly:如果设置为true,那么通过程序(JS脚本等)将无法读取到Cookie信息,这样能有效的防止XSS攻击。 ###Cookie分类 ####会话期Cookie 会话期Cookie是最简单的Cookie:浏览器关闭之后它会被自动删除,也就是它仅在会话期间有效。会话期Cookie不需要指定过期时间(Expires)或者有效期(Max-Age)。需注意的是,有些浏览器提供了会话恢复的功能,这种情况下即便关闭了浏览器会话期Cookie也会被保存,就好像浏览器从来没有关闭一样。 ####持久Cookie 和关闭浏览器便失效不同,持久Cookie可以指定一个特定的过期时间(Expires)或者有效期(Max-Age) ###Cookie的使用 Cookie一般是由服务器端创建需要记录的信息,然后通过HTTP响应头传给客户端,客户端接收响应,从HTTP响应头中取出信息,然后保存在本地磁盘中,当客户端下次发起请求时,会从本地磁盘读取之前保存的信息,然后附加到HTTP请求头中,服务器从HTTP请求头中读取到信息再进行其他处理。Cookie主要用在以下三个方面:
  • 会话状态管理(如用户登录状态、购物车)
  • 个性化设置(如用户自定义设置)
  • 浏览器行为跟踪(如跟踪分析用户行为)

###Session简介 Session即会话,和Cookie本质上没有区别,都是针对HTTP协议的局限性而提出的。Session在Web网站中是指用户在浏览某个网站的时候,从进入都关闭这段时间内的会话。

Session需要配合Cookie使用,服务器将要存储的信息放在Session文件当中,每个Session就是一个Session文件,然后Session文件的文件名也就是SessionID会传给客户端以Cookie的形式存储,以此来到到管理状态的。SessionID按照一定的算法生成,必须保证唯一性和随机性,确保Session的安全,如果Session没有设置过期时间,那么SessionID会存储在内存中,当关闭浏览器的时候ID会自动注销,如果客户端禁用Cookie,那么SessionID可以通过影隐藏表单传递。 ###Cookie和Session的区别

  • Cookie存储在客户端,Session存储在服务端
  • Session的运行依赖SessionID,而SessionID是存储在Cookie中的,也就是Session依赖于Cookie(通过隐藏表单或者url传递SessionID例外)
  • Session可以放在文件,内存,数据库都可以
  • 每次HTTP请求都会带上Cookie,所以Cookie尽量要少用,而且大小也有限制(4k左右)

转载于:https://my.oschina.net/u/3643736/blog/1517405

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值