パッケージのインストール
パッケージのインストール
npm install express-session
npm install express-session
app.use(session({
secret: 'secret',
resave: false,
saveUninitialized: false,
cookie:{
httpOnly: true,
secure: false,
maxage: 1000 * 60 * 30
}
}));
secret は、指定した文字列を使ってクッキー ID を暗号化し、クッキー ID が書き換えらているかを判断します。
resave は、セッションにアクセスすると上書きされます。
saveUninitialized は未初期化状態のセッションも保存します。
httpOnly は、クライアント側でクッキー値を見れない、書きかえれないようにします。
secure は、secure属性の設定です。
Cookie の Secure属性とは、「 HTTPS 通信時のみ Cookie を送信する 」という設定です。
maxage は、セッションを破棄する時間です。
「 Express Generator 」でアプリケーションを作成し、以下のようにファイルを変更します。
var session = require('express-session');
var session_opt = {
secret: 'keyword',
resave: false,
saveUninitialized: false,
cookie: { maxAge: 60 * 60 * 1000}
}
app.use(session(session_opt));
pp.use('/', indexRouter);
app.use('/users', usersRouter);
app.use('/form', formRouter);
「 app.use(session(session_opt)); 」は、ルーターの記述よりも前に記述する必要があります。
app.use('/', indexRouter);
app.use('/users', usersRouter);
app.use('/form', formRouter);
var express = require('express');
var router = express.Router();
/* GET home page. */
router.get('/', function(req, res, next) {
if(req.session.message != undefined) {
msg = req.session.message;
}
res.render('index', { title: 'Express', msg: msg });
});
module.exports = router;
var express = require('express');
var router = express.Router();
router.get('/', (req, res, next) => {
var msg = "送信してください。";
if(req.session.message != undefined) {
msg = req.session.message;
}
let data = {
title: 'Hello',
content: msg
};
res.render('form', data);
});
router.post('/post', (req, res, next) => {
let msg = req.body['message'];
req.session.message = msg;
let data = {
title: 'Hello',
content: '送信されたデータ:' + msg
};
res.render('form', data);
})
module.exports = router;
<!DOCTYPE html>
<html>
<head>
<title><%= title %></title>
<link rel='stylesheet' href='/stylesheets/style.css' />
</head>
<body>
<h1><%= title %></h1>
<p><%- msg %></p>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title><%- title %></title>
</head>
<body>
<p><%- content %></p>
<form action="/form/post" method="post">
<input type="text" name="message">
<input type="submit" value="送信">
</form>
</body>
</html>
「 http://localhost:3000/form 」をブラウザで開きフォームからデータを送信します。
その後、「 http://localhost:3000 」のページを開きます。
フォームから送信されたデータがセッションに保存されているため、画面にフォームから送信された値が表示されます。
var createError = require('http-errors');
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');
const session = require("express-session"); // +
var indexRouter = require('./routes/index');
var usersRouter = require('./routes/users');
var sessionRouter = require('./routes/session'); // +
var app = express();
// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');
app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
app.use(session({
secret: "secret",
resave: false,
saveUninitialized: true,
}));
app.use('/', indexRouter);
app.use('/users', usersRouter);
app.use('/session', sessionRouter); // +
var express = require('express');
var router = express.Router();
router.get('/', function(req, res, next) {
req.session.message = "hello, world";
res.render('session/index');
});
router.get('/sub', function(req, res, next) {
res.render('session/sub', { message : req.session.message });
});
module.exports = router;
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>index.ejs</title>
</head>
<body>
<p><a href="/session/sub">sub</a></p>
</body>
</html>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>sub.ejs</title>
</head>
<body>
<p><%=message %></p>
</body>
</html>
delete(req.session.message)