概念
Session用于记录客户状态的一种机制,不同于Cookie的是,Cookie存储在客户端,而Session则将数据存储在服务器上
Session 的用途
session 运行在服务器端,当客户端第一次访问服务器时,可以将客户的登录信息保存
当客户访问其他页面时,可以判断客户的登录状态,做出提示,相当于登录拦截
session 可以和 Redis 或者数据库等结合做持久化操作,当服务器挂掉时也不会导致某些客户信息(购物车)丢失
工作原理
- 当浏览器访问服务器并发送第一次请求时,服务器端会创建一个 session 对象,生成一个类似于key,value 的键值对
- 将 key(cookie)返回到浏览器(客户)端,浏览器下次再访问时,携带 key(cookie),找到对应的 session(value)
- 最后将存在session中的信息返回到页面上
使用
-
项目中安装express-session和connect-mongo
npm install express-session --save
session插件
npm install connect-mongo --save
session数据存储到数据库
-
代码中使用
① 引入express-sessionlet session = require('express-session');
② 引入connect-mongo用于express连接数据库存储session:结束数据库实现session持久化
let mongoStore = require('connect-mongo')(session);
③ 中间件使用session
app.use(session({ secret:'itlike',//加密字符串 name:'likeid',//返回客户端key的名称,默认为connect_sid resave:false,//强制保存session,即使它没有变化 saveUninitialized:true,//强制将未初始化的session存储。当新建一个session且未设定属性或值时,它就处于未初始化状态。在设定cookie前,这对于登录验证,减轻服务器存储压力,权限控制是有帮助的,默认为true cookie: {maxAge: 24 * 3600},//一天 rolling: false, //在每次请求时进行设置cookie,将重置cookie过期时间 store:new mongoStore({//将session数据存储到mongo数据库中 url:'mongodb://localhost:27017/college', //数据库地址 touchAfter:24*3600 //多长时间往数据库中更新存储一次,除了在会话数据上更改了某些数据除外 }) }));
④ 配置好后,在用户登录的时候,进行存储session;在一些需要登录才能访问的界面,需要取session,如果没有,则跳转到登录界面;用户退出,需要销毁session
-
获取session
req.session
配置好中间件后,就可以在服务器端,使用
req.session
获取session了
-
设置session
req.session.token = 'itlike' ```![在这里插入图片描述](https://www.jb51.cc/res/2022/10-08/07/d070da4e97073740c271ecc34d510bfb.jpg)
-
销毁session
① 方法一:将cookie的时间设置为0,只有cookie中携带的信息通过客户端请求传到服务器,有对应的session接收session才起作用。
cookie没了session自然也就将不起作用。
② 方法二req.session.destory()
:req.session.destory((err)=>{ console.log(err); })
-
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。