都知道http是无状态的协议,那么要记录状态的话,就应当有辅助的东西来记录状态,cookie & session 的做用就在与此啦~web
什么是cookie?cookie实际上是存储到用户本地的少许数据,通常用于用户身份信息确认。redis
那么,咱们怎么看到cookie呢?数据库
审查如下掘金的页面,能够看到掘金存储的cookie,cookie通常存于用户内存&硬盘里面。浏览器
接下来,咱们来看如下cookie的具体属性服务器
name // cookie 名 必须
value // cookie 值 必须
domain // cookie 所属域名 必须
path // cookie 所属path 必须
expires // cookie 过时时间 UTC时间格式
max-age // cookie 存活时间 以s为单位,0表示删除,小于0或没有表示会话cookie(关闭浏览器即失效)
size // cookie 大小
httponly // 只容许http请求携带cookie,document.cookie不支持
secure // 只容许https请求携带cookie,http不容许
复制代码
设置cookie,能够在浏览器端设置,也能够在服务器端设置。cookie
咱们先看下浏览器设置cookie,设置的时候只需对document.cookie对象进行赋值便可,设置完成以后,可在cookie中查看。session
固然了,读取cookie除了在审查元素中看以外,也能够经过document.cookie来读取(除了httponly的cookie)。dom
接着咱们看下服务器端分布式
服务器端设置cookie也很简单,设置的时候,在响应头中设Set-Cookie字段便可,读取的时候,cookie会在请求头中携带过去给服务端。spa
说完了cookie,咱们就来讲如下session。
session一般是web服务用来保存状态的方法,它须要于cookie一块儿使用。
为何session要配合cookie使用呢?缘由很简单,由于没有cookie,用户就没有携带信息过来呀。
因此,第一次访问页面的时候,session就会认为该用户是一个新的用户,因而为用户生成一个session-id : session,而且将session-id在响应头的Set-Cookie中返回,在用户端保存来session-id。
以后的全部请求,用户就都会携带session-id到服务端,服务端在请求头的cookie中拿到session-id,则能够判断用户是谁,而后就能够根据用户的身份进行相应的操做了。
固然,session也有过时时间。例如过时时间为60分钟:没有收到用户数据开始的60分钟后,session就过时了。
session的存储方式有两种:内存 & 数据库
若是服务器单机的话,session存内存是彻底没有问题的。
若是是分布式的话,那么session就不能存内存的,由于多台机器的session是不能互通的,因此可能会出现,有的接口有登陆,有的接口没登陆的状态。因此,分布式的话常常使用的数据库是redis。
cookie与session仍是比较经常使用的,梳理完以后但愿能够更加理解。