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

npm install express-session --save-prod

2、导入

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

3、配置中间件

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

 

4、设置session数据

1 app.get('/login', (req, res) => {
2 
3   req.session.userinfo = 'zhangsan';
4   res.send('登录成功');
5 })

5、获取session数据

1 app.get('/', (req, res) => {
2   if (req.session.userinfo) {
3     res.send('欢迎回来' + req.session.userinfo)
4   } else {
5     res.send('未登录')
6   }
7 })

 案例:

 1 // 导入express
 2 const express = require('express');
 3 // 导入session中间件
 4 const session = require('express-session');
 5 const app = express();
 6 
 7 app.use(session({secret:'123',resave:false,name:'heihie',
 8 saveUninitialized:true
 9 }))
10 // 主页
11 app.get('/',(req,res)=>{
12     // console.log(req.session)
13         if(req.session.uname){
14             res.send('欢迎回来'+req.session.uname)
15         }else{
16             res.send('你还未登录')
17         }
18 })
19 // 登录
20 app.get('/doLogin',(req,res)=>{
21 //用户名和密码正确正确
22     if(req.query.username=='zzj'&& req.query.password=="0803"){
23         // 将用户信息保存到session中
24         req.session.uname=req.query.username;
25         // req.session.password=req.query.password;
26         res.send('登录成功')
27     }
28 })
29 // 启动服务器并监听端口
30 app.listen(3000,()=>{
31     console.log('serve running at http://localhost:3000')
32 })

 

 

session的配置参数

参数

说明

secret

字符串,作为服务端生成session的签名

name

返回客户端的cookie的名称,默认为content.sid,也可以自己设置

resave

强制重新保存session,即使它没有变化,默认为true,建议设置成false

saveUninitialized

强制将未初始化的session存储,默认是true,建议设置成true

cookie

关于cookie配置信息

rolling

在每次请求时强行设置cookie,这将重置cookie过期时间,默认值为false

posted @ 2019-12-18 14:41  张尊娟  阅读(492)  评论(3编辑  收藏  举报