node服务端express-session使用以及无效问题

node服务端express-session使用以及无效问题,第1张

cookie和session

cookie是服务端(服务器)发给客户端(网页)的会员卡,存在客户端,由客户端访问时携带给后端,可以储存信息,由于cookie在前端是完全暴露的,所以安全性特别低。于是乎就有了session

session是存在服务器内存中的数据,通过客服端携带的cookie对应可以找到session中存储的数据信息。如果客户端伪造了cookie则无法对应已存在的信息,安全性相对较高

使用express-session
npm install express-session

const express=require('express'); //express 框架模块
const session=require('express-session'); //express中是把session信息存储在内存中

const app = express();

const sessionConfig={
	secret: 'jone_keystore', // 加密钥匙串
	resave: false, // 每次都立即刷新?
	name:'jone_session_name', // session的名字
	saveUninitialized: true,//无论是否使用sessionid都默认分配一把钥匙,如果设置为false就是传数据的时候才分配钥匙
	cookie: {
        maxAge: 1000 * 3600 * 24, // 时长
        secure: false // https则设置true
    }
}

app.use(session(sessionConfig))

 存、取

app.get('/setSession', (req:Request,res:Response) => {
	req.session.mySelfKey='myToken';
})

app.get('/getSession', (req:Request,res:Response) => {
	res.send(req.session.mySelfKey).end();
})

前端axios要设置

axios.defaults.withCredentials = true;

由于前端上面这个配置,所以后端要以下两点改动,否则前端会报跨域。

1、把 Access-Control-Allow-Origin指定为前端部署站点的域名地址,我这边直接现取。

2、设置Access-Control-Allow-Credentials = true。

app.all('*', (req: Request, res: Response, next: NextFunction) => {
	let origin = req.headers.origin;
	//设置允许任何域访问
	res.header('Access-Control-Allow-Origin', origin ? origin:'*'); //取访问源的站点
	//设置  允许任何 数据类型
	res.header('Access-Control-Allow-Headers', 'Content-Type, Content-Length, Authorization, Accept, X-Requested-With');
	//设置 允许 使用的HTTP方法
	res.header('Access-Control-Allow-Methods', 'PUT, POST, GET, DELETE, OPTIONS');
	// 兼容前端withCredentials=true的设置
	res.header('Access-Control-Allow-Credentials', 'true');
	
	//过滤预请求
	if (req.method === 'OPTIONS') {
		res.sendStatus(200);  //如果是预请求 就不再进行后面的中间件匹配执行了   直接发送回数据
	} else {
		next();//  进入下一个中间件  
	}
});

此时,访问setSession再访问getSession,看看能拿到设置的值了吗

如果不行,则可以检查前端network,查看请求的request Headers中Host和Origin的ip地址是否一致,如果不一致,cookie也不会被携带。前端要解决则就是部署到后端同域名的站点下。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/944486.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-18
下一篇 2022-05-18

发表评论

登录后才能评论

评论列表(0条)

保存