session

session的简介

session是另一中记录客户状态的机制,与cookie不同的是 session数据保存在服务器中,而不是保存在客户端浏览器中,。

session的用途

  • session运行在服务器端,当客户端第一次访问服务器时,可以将客户的登录信息保存在服务器端。

  • 当用户访问站点的其他页面时,可以根据用户的登录状态做出相应的提示,身份验证拦截。

  • session可以和数据库结合做持久化操作,当服务器挂掉时,不会导致用户信息丢失。

session的工作流程

  1. 当客户端第一次请求服务器时,服务器会为每个客户端创建一个独享的session对象,用于跟踪用户的状态。
  2. 同时,为session对象分配一个唯一标识sessionId。
  3. 为了管理session对象,以sessionId为键,以session对象为值,封装成Map集合。
  4. 响应客户端时,将sessionId以cookie的形式发送给客户端,存放在客户端浏览器的缓存中。
  5. 当客户端再次请求服务器时,会将sessionId以cookie请求头的方式发送给服务器,服务器得到sessionId后,从Map集合中,得到session对象,从而跟踪状态。
    在这里插入图片描述

session的特点

  • 同源的页面之间可以共享session数据
  • 浏览器关闭时,服务器中保存的session对象也会跟着销毁
  • 在第一次调用request.getSession()方法时,创建出session,
  • 超时:session超过一定时间(默认30分钟,这个时间可设置)没有人使用,则认为超时,干掉这个session。
  • 自杀:也可以明确的调用session的invalidate()方法,手动的杀死session。
  • 意外身亡:或者当服务器非正常关闭时,服务器中的session跟着消亡。

session的基本使用

1、安装express-sesssion
html npm install express-session --save-prod
2、导入
html const session = require('express-session');

3、配置中间件

// 配置中间件
app.use(session({
  secret: 'keyboard cat',
  resave: false,
  saveUninitialized: true,
  // cookie: { secure: true } // https 协议的请求才会传入 cookie
  
}))

4、设置session数据

app.get('/login', (req, res) => {

  req.session.userinfo = 'zhangsan';
  res.send('登录成功');
})

5、获取session数据

app.get('/', (req, res) => {
  if (req.session.userinfo) {
    res.send('欢迎回来' + req.session.userinfo)
  } else {
    res.send('未登录')
  }
})

session的配置参数

参数说明
secret字符串,作为服务端生成session的签名
name返回客户端的cookie的名称,默认为content.sid,也可以自己设置
resave强制重新保存session,即使它没有变化,默认为true,建议设置成false
saveUninitialized强制将未初始化的session存储,默认是true,建议设置成true
cookie关于cookie配置信息
rolling在每次请求时强行设置cookie,这将重置cookie过期时间,默认值为false
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值