session

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()
})
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值