保留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中。