Сессионный cookie для Express.js - PullRequest
       21

Сессионный cookie для Express.js

22 голосов
/ 07 декабря 2010

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

Сессионные куки, с другой рука, хранит информацию в память браузера и доступна для продолжительность сеанса браузера. Другими словами, данные хранятся внутри сессионный файл cookie доступен из время хранения, пока браузер не закрыто. Перемещение со страницы на страницу в течение этого времени не стирает данные.

Как мне добиться этого, используя Express.js ?

Ответы [ 5 ]

66 голосов
/ 07 декабря 2010

Во-первых, этот сайт ужасное место.

Теперь к вопросу.

Какие сессии на самом деле:

  • Данные хранятся на стороне сервера.
  • Выпускается файл cookie, содержащий идентификатор.
  • Этот идентификатор отправляется обратно на сервер при каждом запросе в связи с тем, что браузер отправляет файлы cookie.
  • Теперь сервер может повторно связать идентификатор в файле cookie - обычно называемый 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);

Это будет просто отслеживать, сколько раз вы заходили на страницу, закрывали браузер и открывали снова. Счет будет все еще там.

Вы можете найти более подробную информацию о параметрах MemoryStore, таких как максимальное время жизни сеанса и т. Д. здесь .

10 голосов
/ 07 декабря 2010

Вот что я хотел (вроде). Когда я закрываю браузер, информация исчезает.

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');
7 голосов
/ 12 января 2012
app.use(express.session({cookie: { path: '/', httpOnly: true, maxAge: null }, secret:'eeuqram'}));

Вышеуказанное работает на IE8, Firefox и Chrome. Важная часть: maxAge: null

2 голосов
/ 07 сентября 2011
app.get('/remember', function(req, res) {
   res.cookie('rememberme', 'yes', { expires: 0, httpOnly: true });
 });

Это установит сессионный cookie.При закрытии браузера он будет удален!

2 голосов
/ 05 сентября 2011

Ниже приведен обновленный код для ответа Альфреда (сеанс с использованием 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);
...