需求:使用koa-session缓存信息
【问题示例】
服务器的koa-session和cors跨域配置:
cors设置origin需重点注意,前端地址写错会影响session。
const Koa = require('koa')
const KoaApp = new Koa()
// koa-session设置
const session = require('koa-session');
// 设置.keys 是cookie密钥
KoaApp.keys = ['my koa session']
const CONFIG = {
key: 'koa.sess',
maxAge: 1000 * 10, // ms 10秒
overwrite:true,
renew: false,
rolling: false,
sameSite: null,
};
KoaApp.use(session(CONFIG, KoaApp));
// 跨域设置
const cors = require('@koa/cors');
KoaApp.use(cors({
origin: 'http://localhost:8899',
allowMethods: ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS'],
allowHeaders: ['Content-Type', 'Authorization', 'Accept'],
credentials: true
}));
服务器设置session接口:
router.post('/user/setSession', async (ctx, next) => {
ctx.session.userInfo = "session数据"
ctx.body = {
success: true,
message:"设置成功"
};
})
服务器查询session接口:
router.post('/user/getSession', async (ctx, next) => {
console.log("ctx.session.userInfo",ctx.session.userInfo)
ctx.body = {
success: true,
message:"查询成功"
};
})
设置前端允许跨域携带凭证
axios.defaults.withCredentials=true //设置跨域请求可以携带凭证
主要问题:cookie设置的时间是10s,按照正常程序走,10s后cookie就不存在了。但发现cookie时间过期未清除!
【解决方法】
1、检查koa-session的maxAge是否设置。
2、检查cookie缓存。检查是否在之前测试过程中,cookie设置了比较长的有效时间,可以在浏览器中F12查看网络请求的cookies。在cookies记录里,查看Max-Age是否和自己设定的有效时间不一。
3、如果不一样,在Application的cookies中,右键把对应的cookie删除。
4、最后,重启浏览器和服务器,重新测试接口,cookie在时间过期后自动清除了。