cookie

112 阅读2分钟

http协议的无状态性

http协议的无状态性,指的是客户端的每一次http请求都是独立的,连续多个请求之间没有直接的关系,服务器不会主动保留每次http请求的状态

什么是Cookie

cookie是存储在用户浏览器中的一段不超过4kb的字符串,它由一个名字,一个值和其他几个用于控制cookie有效期 安全性 使用范围的可选属性组成

不同域名下的cookie各自独立,每当客户端发起请求时,会自动把当前域名下所有未过期的cookie一同发送到服务器

cookie的极大特性

  • 1.自动发送
  • 2.域名独立
  • 3.过期时限
  • 4.4KB限制

cookie不具有安全性

由于cookie时存储在浏览器中的,而且浏览器也提供了读写cookie的api,因此cookie很容易被伪造,不具有安全性,因此不建议服务器将重要的隐私数据,通过cookie的形式发送给浏览器

注意:千万不要使用cookie存储重要且隐私的数据! 比如用户的身份信息,密码等

向session中存数据

当express-session中间件配置成功后,即可通过req.session来访问和使用session对象:

app.post('/api/login',(req,res)=>{
    //判断用户提交的登录信息是否正确:
    if(req.body.username!=='admin' || req.body.password!=='000000'){
        return res.send({status:1,msg:'登录失败'})
    }
    
    req.session.user=req.body//将用户的信息,存储到session中
    req.session.islogin=true //将用户的登录状态,存储到session中
    
    res.send({status:0 ,msg:'登陆成功'})
})

配置 express-session中间件

express-session 中间件安装成功后,需要通过app.use()来注册session中间件

var session=require('express-session');

//配置session中间件
app.use({
    secret:'itstudy',//secret属性的值可以为任意字符串
    resave:false   //固定写法
    saveUninitialized:true  //固定写法
})

从session中取数据

可以直接从req.session对象上获取之前存储的数据

//获取用户姓名的接口
app.get('/api/username',(req,res)=>{
    //判断用户是否登录
    if(!req.session.islogin){
        return res.send({status:1.msg:'fail'})
    }
    
    res.send({status:0,msg:'success',username:req.session.user.username})
})

清空session

调用 req.session.destroy()函数,即可清空服务器保存的session信息

//退出登录的接口
app.post('/api/logout',(req,res)=>{
    //清空当前客户对应的session信息
    req.session.destroy();
    res.send({
        status:0,
        msg:'退出登录成功'
    })
})