Express中的session使用

介绍

Session用于记录客户状态的一种机制,不同于Cookie的是,Cookie存储在客户端,而Session则将数据存储在服务器上。
Session 的用途:
session 运行在服务器端,当客户端第一次访问服务器时,可以将客户的登录信息保存。
当客户访问其他页面时,可以判断客户的登录状态,做出提示,相当于登录拦截。
session 可以和 Redis 或者数据库等结合做持久化操作,当服务器挂掉时也不会导致某些客户信息(购物车)丢失。

工作原理

当浏览器访问服务器并发送第一次请求时,服务器端会创建一个 session 对象,生成一个类似于key,value 的键值对,然后将 key(cookie)返回到浏览器(客户)端,浏览器下次再访问时,携带 key(cookie),找到对应的 session(value)。 进而将存在session中的信息返回到页面上。

用法

1.项目中安装express-session和connect-mongo
npm install express-session --save
npm install connect-mongo --save
2.代码中使用

var express = require('express');
var app = new express;
app.listen('3000','127.0.0.1');
//引入express-session
var session = require('express-session');
//引入connect-mongo用于express连接数据库存储session
var mongoStore  = require('connect-mongo')(session);
//中间件使用session
app.use(session({
	//参数配置
	secret:'luckystar',//加密字符串
	name:'userid',//返回客户端key的名称,默认为connect_sid
	resave:false,//强制保存session,即使它没有变化
	saveUninitialized:true,//强制将未初始化的session存储。当新建一个session且未设定属性或值时,它就处于未初始化状态。在设定cookie前,这对于登录验证,减轻服务器存储压力,权限控制是有帮助的,默认为true
	cookie:{maxAge:50000},
	rolling:true, //在每次请求时进行设置cookie,将重置cookie过期时间
	store:new mongoStore({//将session数据存储到mongo数据库中
		url:'mongodb://127.0.0.1/admin', //数据库地址
		touchAfter:24*3600  //多长时间往数据库中更新存储一次,除了在会话数据上更改了某些数据除外
	})
}));
app.get('/',(req,res) => {
	//获取session
	if(req.session.username){
		res.send('欢迎'+req.session.username+'回来');
	}else{
		res.send('未登录')
	}
})
app.get('/login',(req,res) => {
	//设置session
	req.session.username = 'star';
	res.send('登录成功')
})
app.get('/loginOut',(req,res) => {
	//销毁session
	//方法一,将cookie的时间设置为0,只有cookie中携带的信息通过客户端请求传到服务器,由对应的session接收session才起作用,cookie没了session自然而然的将不起作用
	req.session.cookie.maxAge = 0;
	//方法二destroy
	req.session.destroy((err) => {
		console.log(err)
	})
	res.send('退出登录')
})
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值