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('退出登录')
})

猜你喜欢

转载自blog.csdn.net/weixin_40970987/article/details/83654585