search
LoginSignup
69

More than 5 years have passed since last update.

posted at

updated at

[node.js]express-sessionでセッションを使用してみた

expressでアプリケーションを作る際にsessionを使う

自分がチャットアプリケーションを作る際にログイン時にセッションを使いたかったので。
とりあえず、express-sessionの使い方から学んできたい。
とりあえずセッションの格納方式はメモリストアで行く。

モジュールインストール

npm install --save-dev express-session
パッケージファイルに自動で上書きしてくれるように--save-devオプションを使う。
これでexpress-sessionが使えるようになった。

app.jsでrequire&use

宣言文は以下の通り。

app.js
var cookieParser = require('cookie-parser'); 
var session = require('express-session');`

npmのread.meではヴァージョン1.5以降はクッキーパーサーは必要はないと書いてあったのでもしかしたら一行目はひつようないかも。

sessionの設定

app.js
 app.use(session({
  secret: 'secret',
  resave: false,
  saveUninitialized: false,
  cookie:{
  httpOnly: true,
  secure: false,
  maxage: 1000 * 60 * 30
  }
}); 
  • secret属性は指定した文字列を使ってクッキーIDを暗号化しクッキーIDが書き換えらているかを判断する。
  • resaveはセッションにアクセスすると上書きされるオプションらしい。今回はfalse.
  • saveUninitializedは未初期化状態のセッションも保存するようなオプション。今回はfalse.
  • httpOnlyはクライアント側でクッキー値を見れない、書きかえれないようにするオプション
  • secureオプションはhttpsで使用する場合はtrueにする。今回はhttp通信なのでfalse
  • maxageはセッションの消滅時間。単位はミリ秒。ミリ秒は千分の一秒なので1000 * 60 * 30で30分と指定。

sessionの使用

今回はログインしたらセッションにユーザーIDを格納する。ちなみにログインフォームでidとパスワードが入力されreq.body.idで使用している。

login.js
var Users = mongoose.model('User');
var id = req.body.id;
var pass = req.body.password;
Users.findOne({ "id": id},function(err, user){
  if(err){
    console.log(err);
  }
  else{
    if(user.password === pass){
    req.session.username = id;
    res.render('index', {name: req.session.username});
  }
    else{
    res.render('login');
  }
  }
});
});

認証に成功したらreq.session.usernameをindexファイルにレンダリング。
indexファイルに以下の文を記述する.

index.ejs
<p>welcome to <%=name %> !!!<p>

結果
スクリーンショット (61).png

おそらくセッションが作られた。
次はこれをsocket.ioで使用できるようにしたい。

github

githubにコードを挙げておくので参照してみてください。

https://github.com/hikaru7719/chat_app

参考文献

github express-sessionリポジトリ
https://github.com/expressjs/session

Node.js + Express.js + express-sessionでセッションにデータ格納する方法
http://qiita.com/moomooya/items/00f89e425a3034b8ea14

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
69