Express.js的会话专用cookie

http://www.javascriptkit.com/javatutors/cookie.shtml

另一方面,会话专用cookie将信息存储在浏览器内存中,并在浏览器会话期间可用。 换句话说,存储在会话cookie内的数据在存储之前是可用的,直到浏览器closures。 在此期间页面之间移动不会擦除数据。

我怎样才能达到这个使用Express.js ?

首先,该网站是一个可怕的去处。

现在就这个问题。

什么会议实际上是:

  • 数据存储在服务器端。
  • 发出一个包含ID的cookie。
  • 由于浏览器发送cookie,因此每个请求都会将此ID发送回服务器。
  • 现在,服务器可以将cookie中的ID(通常称为Session ID或短SID )与存储在服务器上的会话数据重新关联。

Express.js支持内置的会话 。

这个例子显示的是:

  • 设置Express.js中间件
  • 使用第三方存储来保存会话数据,在这种情况下, Redis (IMO对你的问题atm是矫枉过正的)

安装Redis需要相当多的工作,但也可以使用Express.js的内置存储器:

 var express = require('express'); var app = express.createServer(); var MemoryStore = require('connect/middleware/session/memory'); app.use(express.bodyDecoder()); app.use(express.cookieDecoder()); app.use(express.session({ store: new MemoryStore({ reapInterval: 60000 * 10 }) })); app.get('/', function(req, res){ req.session.visitCount = req.session.visitCount ? req.session.visitCount + 1 : 1; res.send('You have visited this page ' + req.session.visitCount + ' times'); }); app.listen(4000); 

这将简单地跟踪您访问页面的次数,closures浏览器并重新打开。 计数将仍然在那里。

您可以在这里find有关MemoryStore的选项的更多信息,例如会话的最大生存时间等。

以下是我想要的(有点)。 当我closures浏览器的信息消失了。

 var express = require('express'); var app = express.createServer(); var MemoryStore = require('connect/middleware/session/memory'); app.use(express.bodyDecoder()); app.use(express.cookieDecoder()); app.get('/remember', function(req, res) { res.cookie('rememberme', 'yes', { expires: new Date() - 1, httpOnly: true }); }); app.get('/', function(req, res){ res.send('remember: ' + req.cookies.rememberme); }); app.listen(4000, '127.0.0.1'); 
 app.use(express.session({cookie: { path: '/', httpOnly: true, maxAge: null }, secret:'eeuqram'})); 

上面的作品在IE8,Firefox和Chrome上。 重要的一块是maxAge:null

 app.get('/remember', function(req, res) { res.cookie('rememberme', 'yes', { expires: 0, httpOnly: true }); }); 

这将设置会话cookie。 在浏览器closures它将被删除!

下面是阿尔弗雷德答案 (使用Express.js会话)的更新代码。

  var express = require('express'); var app = express.createServer(); var MemoryStore = require('/home/node/node_modules/connect/lib/middleware/session/memory'); app.use(express.bodyParser()); app.use(express.cookieParser()); app.use(express.session({ key: 'some-key', secret: 'some-We1rD sEEEEEcret!', store: new MemoryStore({ reapInterval: 60000 * 10 }) })); app.get('/', function(req, res) { req.session.visitCount = req.session.visitCount ? req.session.visitCount + 1 : 1; res.send('You have visited this page ' + req.session.visitCount + ' times'); }); app.listen(4000);