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);