当前位置: 首页 > 后端技术 > Node.js

node中session和redis的使用及遇到问题的处理

时间:2023-04-03 16:53:44 Node.js

使用场景session运行在server端。当客户端第一次访问服务器时,可以保存客户端的登录信息。可以保存客户的一些常用信息。客户端再次获取常用信息时,不需要再从数据库中查询。使用session时,数据会直接存储在内存中。如果数据太大,会造成溢出,所以session需要配合数据库使用。这里使用redis来存储session数据。使用redis需要在服务器中安装redisnode项目。引入npminstallexpress-session--savenpminstallredisconnect-redisexpress-session--saveuseconstsession=require('express-session');constredis=require('redis')letRedisStore=require('connect-redis')(session)letclient=redis.createClient()app.use(session({store:newRedisStore({client}),secret:"secret",//相当于一个加密密钥,取值可以是任意字符串resave:false,//强制session保存到sessionstorecookie:{maxAge:1000*60*60,//设置有效时间,在milliseconds},saveUninitialized:false//强行把没有'initialization'的session保存到storage}))session初始化需要在路由之前,否则会报sessionisundefined错误sessiongetapp.get('/setSession',function(req,res){req.session.test=123;res.end();});app.get('/getSession',function(req,res){console.log(req.session.test);重发();});如果请求是跨域的,则无法获取到req.session.test。其实这是浏览器的同源策略导致的问题:不允许JS访问跨域cookie。引入corsnpminstallcors--savesettingsconstcors=require('cors');app.use(cors({origin:'http://localhost:3000',credentials:true}));origin:配置访问-Control-Allow-OriginCORS头,默认为'*',这里必须设置为前端域名,否则cookie不会被带到后端front-endimportaxiosnpminstallaxios--savesetaxios.defaults.withCredentials=true;//axios请求带cookiesaxios开启withCredentials,服务端可以获得cookie永久链接:https://blog.qianxiaoduan.com/archives/1266