cookies、session、token

首先http是无状态的协议,为了使某个域名下的所有网页能共享数据,有了session 和cookies

session

:sessionid与session key-value对应(我以前一直认为seesionid就是session所以一直不理解)

 客户端访问服务器流程:

1、当浏览器第一次访问服务器时,会在服务器端建立一个session,同时生成一个唯一的sessionID。sessionID和session作为key和value保存在缓存或数据库中,。服务器把sessionid以cookie的形式返回给浏览器;

2、下次访问时,浏览器发送的请求的cookie中携带此session ID;

3、服务器收到请求,分析cookie,验证信息,核对成功后返回response给客户端

     服务器端session控制登录

HttpSession session = request.getSession();         

//使用request对象的getSession()获取session,如果session不存在则创建一个 这里把sessionid以cookie形式传给客户端

//将数据存储到session中

if (session.getAttribute("user1") == null) {

            //进行登录

            if (username.equals("user1")) {

                session.setAttribute("user1",session.getId());

                return "登录成功!";

            }else{

                return "登录失败!";

            }

        } else if (session.getAttribute("user1") != null && session.getAttribute("user1").equals(session.getId())) {

            return "免登陆";



}

 

 

客户端是没有session说法的,session是服务器在客户端建立连接时添加客户端连接标志。一般通过cookies发送给客户端,当客户端第一次请求时服务器会检查是否携带了这个Session(临时Cookie),如果没有则会添加Session,如果有就拿出这个Session来做相关操作。

 

token:

最简单的token组成:uid、time、sign

 

1、用户通过用户名密码发送请求登录

2、服务器验证,校验生成token

3、服务器返回一个签名的token给客户端

4、客户端存储token并没次请求携带token (放在http头)

5、服务器端验证token并返回数据

基于JWT(json web token)的token认证实现

JWT 标准token:header,payload、signature中间用点分隔,用Base64编码;

header:{

  "alg": "HS256"

}加密算法

payload:token的具体内容,标准字段等

signature:这部分内容有三个部分,先是用 Base64 编码的 header.payload ,再用加密算法加密一下,加密的时候要放进去一个 Secret ,这个相当于是一个密码,这个密码秘密地存储在服务端。

const encodedString = base64UrlEncode(header) + "." + base64UrlEncode(payload);

HMACSHA256(encodedString, 'secret’);

 

客户端收到这个 Token 以后把它存储下来,下回向服务端发送请求的时候就带着这个 Token 。服务端收到这个 Token ,然后进行验证,通过以后就会返回给客户端想要的资源。

 

session和token区别:

1、session 浏览器自动携带,token需代码携带

2、session需要存储空间,token不需要

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值