[网络] - session、cookie、token是什么

出现原因
http是一个无状态协议,为了使某个域名下的所有网页能够共享某些数据,出现了session和cookie。


1、客户端访问服务器的流程如下:

  • 首先,客户端会发送一个http请求到服务器端。
  • 服务器端接受客户端请求后,建立一个session,并发送一个http响应到客户端,这个响应头,其中就包含Set-Cookie头部。该头部包含了sessionId。
    Set-Cookie: value[; expires=date][; domain=domain][; path=path][; secure]
  • 在客户端发起的第二次请求,假如服务器给了set-Cookie,浏览器会自动在请求头中添加cookie
  • 服务器接收请求,分解cookie,验证信息,核对成功后返回response给客户端

2、cookie和session

  • 都是用来跟踪浏览器用户身份的会话方式
  • cookie数据保存在客户端,session数据保存在服务器端
  • cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗,如果主要考虑到安全应当使用session
  • session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,如果主要考虑到减轻服务器性能方面,应当使用COOKIE
  • 单个cookie在客户端的限制是几K
  • 将登陆信息等重要信息存放为SESSION;其他信息如果需要保留,可以放在COOKIE中

3、token

  • 组成
    uid: 用户唯一身份标识
    time: 当前时间的时间戳
    sign: 签名, 使用 hash/encrypt 压缩成定长的十六进制字符串,以防止第三方恶意拼接
    固定参数(可选): 将一些常用的固定参数加入到 token 中是为了避免重复查库
  • 存放
    token在客户端一般存放于localStorage,cookie,或sessionStorage中。在服务器一般存于数据库中
  • token认证流程
    用户登录,成功后服务器返回Token给客户端。
    客户端收到数据后保存在客户端
    客户端再次访问服务器,将token放入headers中
    服务器端采用filter过滤器校验。校验成功则返回请求数据,校验失败则返回错误码

4、js操作cookie

设置cookie:
document.cookie ="name="+uname
或者

//写cookies
function setCookie(name,value)
{
var Days = 30;
var exp = new Date();
exp.setTime(exp.getTime() + Days*24*60*60*1000);
document.cookie = name + "="+ escape (value) + ";expires=" + exp.toGMTString();
}

读取cookie:

function getCookie(name)
{
var arr,reg=new RegExp("(^| )"+name+"=([^;]*)(;|$)");
if(arr=document.cookie.match(reg))
return unescape(arr[2]);
else
return null;
}

删除cookie:

function delCookie(name)
{
var exp = new Date();
exp.setTime(exp.getTime() - 1);
var cval=getCookie(name);
if(cval!=null)
document.cookie= name + "="+cval+";expires="+exp.toGMTString();
}
Paste_Image.png

设置cookie过期时间为现在过期,即删除cookie。


方法调用:

Paste_Image.png

总结

  • session存储于服务器,拥有一个唯一识别符号sessionId,通常存放于cookie中。服务器收到cookie后解析出sessionId,再去session列表中查找,才能找到相应session。依赖cookie。
  • cookie类似一个令牌,装有sessionId,存储在客户端,浏览器通常会自动添加。
  • token也类似一个令牌,无状态,用户信息都被加密到token中,服务器收到token后解密就可知道是哪个用户。需要开发者手动添加。

参考文章
彻底弄懂session,cookie,token

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容