保留node.js服务器重启之间的会话
我正在开发一个node.js应用程序,并使用nodemon来运行它。 我的问题是我如何保持会话打开,当我在服务器中进行更改,并重新启动nodemon。
这个答案假定你使用的是Express或Koa,这两个比较stream行的node.js web框架 。
在你的应用程序中,你可能有一行说明以下内容。
快递4
var app = require( 'express' )() var session = require( 'express-session' ) app.use( session() ) // this is the session middleware
KoaJS
var app = require( 'koa' )() var session = require( 'koa-session' ) app.use( session() ) // this is the session middleware
Web应用程序的指导性智慧就是尽可能使其世界面向无状态 。 这意味着你的node.js服务器在请求之间不包含任何信息,并且可以在任何时候被销毁和重启。
会议是一个非常有状态的事情。 因此,您需要将会话数据存储在旨在长期保持数据无损的情况下。 这通常是通过数据库(更安全)或浏览器cookie(不太安全)完成的。
快速会话模块默认将会话信息保存在内存中。 这违反了无状态的理念,并将在重新启动时丢失会话信息。
koa会话模块默认使用cookie。 这是无状态的,但会引起一些安全问题,因为用户可能会修改自己的会话variables,因此请勿将其用于计费或其他敏感操作。
在上述两个模块中,您可以使用自己的会话存储覆盖默认设置。
Redis会话存储
我通常将会话数据存储在类似redis的数据库中。
performance
这可以很容易地连接到一个像connect-redis模块快递。
引用自述文件:
var session = require('express-session'); var RedisStore = require('connect-redis')(session); app.use(session({ store: new RedisStore(options), secret: 'keyboard cat' }));
KoaJS
koa使用koa-redis模块也可以使用redis存储会话数据。 自述文件的解释:
var app require('koa')(); var session = require('koa-generic-session'); var redisStore = require('koa-redis'); app.keys = ['keys', 'keykeys']; app.use(session({ store: redisStore() })); app.use(function *() { this.session.name = 'koa-redis'; });
没有数据库会话存储
performance
Express可以将会话数据存储在cookie 会话扩展名的Cookie中 。
兴亚
如前所述,默认情况下, koa会话模块将会话存储在cookie中。