Express.js的仅会话cookie

时间:2010-12-06 21:33:50

标签: node.js session-cookies express

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

  

仅会话cookie,另一方面   手,存储信息   浏览器内存,可用于   浏览器会话的持续时间。   换句话说,数据存储在里面   会话cookie可以从   存储时间直到浏览器   关闭。从页面移动到页面   在此期间不擦除   数据

如何使用Express.js实现此目的?

5 个答案:

答案 0 :(得分:66)

首先,该网站是一个可怕的地方。

现在回答这个问题。

实际上是什么会话:

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

Express.js has support for sessions built in

示例显示的内容:

  • 设置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);

这将简单地跟踪您访问该页面的次数,关闭浏览器并重新打开。计数仍将存在。

您可以找到有关MemoryStore选项的更多信息,例如会话的最长续订时间等。here

答案 1 :(得分:10)

以下是我想要的(有点)。当我关闭浏览器时,信息就消失了。

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

答案 2 :(得分:7)

app.use(express.session({cookie: { path: '/', httpOnly: true, maxAge: null }, secret:'eeuqram'}));

以上适用于IE8,Firefox和Chrome。 重要的部分是 maxAge:null

答案 3 :(得分:2)

以下是Alfred's answer的更新代码(使用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);

答案 4 :(得分:2)

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

这将设置会话cookie。在浏览器关闭时,它将被删除!