session思想
1.客户端输入用户名和密码请求登录
2.服务端收到请求,去数据库进行验证用户名和密码
3.验证成功之后,服务端种一个cookie或发一个字符到客户端,同时服务器保留一份session
4.客户端接收到响应以后可以把收到的字符存到cookie
5.客户端每次向服务端请求资源的cookie会自动携带
6.服务端收到请求,然后去验证cookie和session,如果验证成功,就像客户端返回请求的库数据
Session存储位置: 服务器内存,磁盘,或者数据库里
Session存储内容: id,存储时间,用户名等说明一下登录的用户是谁
客户端携带 : cookie自动带,localStorage手动带
如何保存信息给浏览器
前端种:
cookie/localstorage
后端种:
服务器给浏览器种cookie:cookie-parser
服务器给浏览器种cookie的同时在服务器上生成session:cookie-session
cookie-session
安装引入
let cookieSession = require('cookie-session')
配置中间件
app.use(cookieSession({
name:'保存到服务器的session的名字',
keys:[必穿参数,代表加密层级],
maxAge:1000//保留cookie的时间,毫秒单位
}))
种cookie,备份session
req.session.key = value
读cookie对比session
req.session.key 返回true
删除cookie
delete req.session.key
req.session.key = undefined 两种方式任选一种
let express = require('express')
//服务器给浏览器种cookie的同时在服务器上生成seesion
let cookieSession = require('cookie-session')
//搭建服务
let app = express()
//静态资源托管
app.use(express.static('./sy'))
//监听端口
app.listen(3000)
//使用中间件
cookiesessionapp.use(cookieSession({
name:mycookie;//后端给前端种的cookie的名字
keys:['aaa','bbb','sss'],//验证加密的层级
maxAge:1000*30 //保留cookie的时间
}))
//验证用户身份
app.get('/api/login',(req,res,next)=>{
//1.验证客户端传来的用户名与密码和数据库里面的是否一致
//2.给客户端种cookie并且同时为服务端留一份session
req.session.user = 'userId';//给客户端种cookie,并且给服务端备份session
//3.后端种完cookie,就可以给前端返回数据
res.send({
err:0,
msg:'登录成功了',
data:{
username:'张三'
}
})
res.end()
})
//自动登录功能
app.get('/api/user',(req,res)=>{
//读取cookie,对比session
let pass = req.session.user//如果用户登录了,那么pass = 'userId',如果用户cookie失效或者没有cookie,那么返回undefined console.log(pass)
if(pass){ //说明用户身份存在,读取数据,并且返回
res.send({
err:0,
data:'用户的数据'
})
}else{
res.send({
err:1,
data:'登录过期了'
})
}
res.end()
})
//注销登录
app.get('/api/logout',(req,res)=>{
//删除服务器session和客户端的cookie
req.session.user = undefined
//或者
//delete req.session.user
res.end()
})