Cookie 与 Session初级使用心得

296 阅读3分钟

前言

最近做了项目有关登入/登出的模块,正好需要登陆状态存储和清除的问题,就想着写一篇简单的,个人对cookie和session的认识小总结。

http

因为http是无状态协议,就是指这一次请求和上一次请求没有任何关联,没有任何关系,这样的好处的就是高效,但是我们又有同一域名下的地址可以实现部分数据共享(比如登陆信息),因为一个用户的所有请求操作都属于同一个回话,cookie和session也就随之出现了。

流程:

  • 客户端发送一个http请求到服务端
  • 服务端收到客户端请求之后,建立一个session,并会发送一个想http响应给客户端,这个响应头中包含了Set-Cookie头部。该头部包含了SesisonId,会在客户端设置一个属于这个这个域名的cookie
  • 在客户端发起第二次请求时,浏览器会自动在请求头中添加cookie(包括sessionid)
  • 服务端接受请求,分解cookie,验证信息,核对成功后返回响应给客户端

cookie

**有同源策略的限制 **

Cookie不可以跨域名使用,这是由于浏览器的隐私安全机制决定,禁止网站非法获取其他网站的cookie。一般情况下,同一个一个域名下的二级域名中不能相互使用Cookie

过期时间

  • cookie可以设置过期时间,Cookie有永久也有临时的,Cookie的maxAge决定有效期,单位为秒
  • maxAge为正数时候,则表示Cookie会在maxAge秒后自动失效。这种情况下,浏览器会讲Cookie写到对应的Cookie文件中。时间到了,cookie就会消失,与关闭电脑或浏览器无关
  • maxage为0,则表示删除cookie
  • 如果设置了 maxAge,expires 将会被覆盖。如果 maxAge 和 expires 都没设置,Cookie 将会在浏览器的会话失效(一般是关闭浏览器时)的时候失效。

大小限制

IE6.0IE7.0/8.0OperaFFSafariChrome
cookie个数每个域为20个每个域为50个每个域为30个每个域为50个没有个数限制每个域为53个
cookie大小4095个字节4095个字节4096个字节4097个字节4097个字节4097个字节

安全性

  • 最大的原因是它存储在浏览器端(用户本地),一些别有用心的人能够通过浏览器截获cookie(脚本、利用工具抓取等)

Session

定义

Session(会话)是另一种记录客户状态的机制,保存在服务器上。客户端浏览器访问服务器时,服务器把客户端信息以某种形式记录在服务器上,当客户端浏览器再次访问时只需要从该Session中查找该客户的状态即可。

实现

  • 首先,服务器开辟Session存储空间并创建Session,服务器会为该Session生成唯一的SessionID并添加相应内容
  • 服务器将SessionID发送给客户端,客户端将其保存
  • 当客户端再次发送请求时会带上SessionID
  • 服务器接收请求后根据SessionID找到相应的Session

一般与Cookie共同使用(依赖关系)

Session需要使用Cookie作为识别标志。

HTTP协议是无状态的,Session不能依据HTTP连接来判断是否为同一客户,因此服务器向客户端浏览器发送一个名为JSESSIONID的Cookie,它的值为该Session的id(也就是HttpSession.getId()的返回值)。Session依据该Cookie来识别是否为同一用户。

Cookie与Session的关系

区别

  • Cookie数据存放在客户的浏览器上,Session数据放在服务器上
  • Cookie不是很安全,Session更加安全
  • Session会在一定时间保存在服务器上。当访问增多,会占用服务器的性能。为减轻压力,可使用Cookie
  • Cookie大小有限制