express 使用cookie-session 中间件判断用户的状态

cookie-session

用户和服务器通过发送http请求进行交互,而http是一个无状态协议,也就是说这一次请求和上一次的请求之间是没有任何关系的。为了让服务器知道是同一个用户端发送的请求,我们可以通过浏览器保存一些信息,每次发送请求的时候都带到服务器端,服务端根据这些信息来判断是不是同一个用户进行的访问。

服务器给浏览器只种cookie,使用cookie-parser中间件。
服务器给浏览器种cookie的同时在服务器上生成session,使用cookie-session中间件。

1. 安装

在终端中执行以下命令
npm install cookie-session
或者使用yarn 安装
yarn add cookie-session

2. 导入

使用require导入到模块中

const cookieSession=require("cookie-session");

3. 操作session的方法

设置:req.session.key=value;
读取:req.session.key
删除:delete req.session.key 或者 req.session.key=null;

4. 使用

cookie-session的一些配置项:

  • name:[String],要设置的Cookie的名称,默认为express:sess。
  • keys:[Array],是个数组,用于签名和验证Cookie值的键列表。设置Cookie时始终使用签名keys[0],验证时使用其它密钥。
  • secret:[String],如果没有设置keys,将使用secret作为单一密钥。
  • maxAge:[Number],设置有效时间,为毫秒数。
  • 关于cookie的一些配置项:
    • maxAge:[Number],设置cookie的有效时间,为毫秒数。
    • expires:[Date],设置cookie的过期日期,是一个Date对象,默认在会话结束时过期。
    • domain:[String],设置cookie的域,无默认值。
    • secure:[Boolean],设置cookie是否仅通过HTTPS发送。
    • httpOnly:[Boolean],设置cookie是否仅通过HTTP(S)发送,并且不提供给客户端JavaScript,默认为true。

案例:

var cookieSession = require('cookie-session');
var express = require('express');
var app = express();

//设置中间件,keys和secret必须要有一个
app.use(cookieSession({
  name:"sess",
  keys:["aaa","bbb","ccc"],
  maxAge:24*60*60*1000, //有效时间为24小时
}))

app.post("/login",(req, res) {
	let {username,password} = req.body;
	//给浏览器返回cookie,同时服务器设置session
	req.session.username = password;
	//返回数据给浏览器
	res.send({message: "登录成功"});
});

app.get("/getInfo",(req,res){
	//判断是否有对应的session
	if (req.session.username) {
		res.send({message:"数据信息"})
	} else {
		res.send({message: "请先登录"})
	}
});

app.get("/logout",(req,res){
	//删除session
	req.session.username=null;	
	res.send({message: "退出成功"})	
});
app.listen(3000)

使用req.session 设置值后,在浏览器端就可以看到对应的cookie值。
session
同时在每次请求的时候,cookie会被写入request.header中,带到服务器端,服务器拿到cookie中携带的sessionid后,会自动找到对应的session,这个过程是在服务器内部完成的,不需要干涉。

如果cookie被篡改,服务器根据篡改后的sessionid,找不到对应的session,则说明没有存储这个用户的状态。
session
当手动清除浏览器的cookie后,那么sessionId也就没有了,所以当再次请求的时候,服务器无法获得sessionid,也就没有办法获取对应的session,无法对当前请求的用户进行判断。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值