http://www.javascriptkit.com/javatutors/cookie.shtml
一方、セッションのみのCookieは情報をブラウザのメモリに保存し、ブラウザセッションの期間中利用できます。つまり、セッションCookie内に保存されたデータは、保存時からブラウザが閉じられるまで利用できます。この間にページ間を移動しても、データは消去されません。
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.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');
まず、そのWebサイトは恐ろしい場所です。
それでは質問です。
実際のセッションとは:
Session ID
またはshort SID
と呼ばれる)をサーバーに保存されているセッションデータに再度関連付けることができます。Express.jsは組み込みセッションをサポートしています 。
例が示すもの:
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
のオプションの詳細を確認できます ここ 。
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が設定されます。ブラウザを閉じると消去されます!
以下は、更新された Alfredの回答 (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);