node.js--session VS token

session思想

	1、客户端用户名跟密码请求登录
	2、服务端收到请求,去库验证用户名与密码
	3、验证成功后,服务端种一个cookie或发一个字符到客户端,同时服务器保留一份session
	4、客户端收到 响应 以后可以把收到的字符存到cookie
	5、客户端每次向服务端请求资源的cookie会自动携带
	6、服务端收到请求,然后去验证cookie和session,如果验证成功,就向客户端返回请求的库数据

node.js--session VS token_第1张图片

session的使用

let express = require('express')
//引入中间件
let cookieSession = require('cookie-session')

let app = express()
app.use(express.static('./www'))
app.use(cookieSession({
    name:"xixi",
    keys:['aa','bb','cc'],
    maxAge:1000*60*60*24//存多久
}))
//登录
app.get('/api/login',(req,res)=>{
    req.session['wind']='userId'
    res.send({
        error:0,
        data:{
            a:1,
            b:2
        }
    })
})
//自动登录
app.get('/api/user',(req,res)=>{
    let pass = req.session['wind']
    if(pass){
        res.send({
            err:0,
            data:'假数据'
        })
    }else{
        res.send({
            err:1,
            data:'未登录或过期'
        })
    }
})
//删除
app.get('/api/loginout',(req,res)=>{
    req.session.wind = undefined
    res.end()
})
//监听
app.listen(3048,'localhost',()=>{
    console.log('server is running')
})

token的思想

1、客户端使用用户名跟密码请求登录
2、服务端收到请求,去验证用户名与密码
3、验证成功后,服务端会签发一个 Token(加了密的字符串),再把这个 Token 发送给客户端
4、客户端收到 Token 以后可以把它存储起来,比如放在 Cookie 里或者 Local Storage 里
5、客户端每次向服务端请求资源的时候需要带着服务端签发的 Token
6、服务端收到请求,然后去验证客户端请求里面带着的 Token,如果验证成功,就向客户端返回请求的数据

node.js--session VS token_第2张图片

token的使用

let express = require('express')
//引入中间件
let bodyParser = require('body-parser')
let jwt = require('jsonwebtoken')
let app = express()
app.use(bodyParser())
app.listen(3021,'localhost',()=>console.log('server is running'))
//生成token
app.post('/api/login',(req,res)=>{
    console.log('携带的数据',req.body)
    //兜库
    let token = jwt.sign({
        username:req.body.username,
        userId:'数据库里的数据'
    }, "windrise", {
        expiresIn:60*60
    })
    //返回
    res.send({
        err:0,
        data:'库数据',
        msg:"登录成功",
        token:token
    })
})
//校验token
app.get('/api/user',(req,res)=>{
    //获取token
    let token = req.body.token || req.query.token || req.header.token;
    //校验token
    jwt.verify(token, "windrise", (err,decode)=>{
        console.log('err',err)
        console.log('decode',decode)
        if(err){
            res.send({
                err:1,
                msg:'未登录或已过期'
            })
        }else{
            res.send({
                err:0,
                msg:'登录成功',
                data:'数据库'
            })
        }
    })
})

session VS token

node.js--session VS token_第3张图片
在使用session会存在多服务粘性问题,session是发送到服务器中,当你在第一台服务器中存了数据,第二台服务器中并没有原来的数据;而token则不会存在这种问题,token是将服务器端发回来的数据存储在地址栏中,所以不影响服务器的更换

你可能感兴趣的:(node.js,node.js,html,html5,session)