【Node.js】Express-Sessionを使ってセッション管理

0

原田です。こんにちは。Node.jsでSession管理を実装するときにハマったのでまとめたいと思います。

Session管理の解説は他の方々がたくさん書いているので省略します。

環境は以下のとおりです。

環境

	CentOS 7.0
	Node.js v6.11.3
	npm : 3.10.10


スポンサーリンク




準備

WorkSpaceを作成したら、以下のコマンドで必要なサードパーティをインストールします。

	$ sudo npm install express --save
	$ sudo npm install express-session --save
	$ sudo npm install connect-radis --save

そして、radisというNoSQLのソフトウェアをインストールします。NoSQLはその名の通り、SQLを使わないDBのことです。
また、メモリ上にデータを持つため非常に高速なのが特徴みたいです。

インストールは、パッケージ管理が足りていなかったため、以下のコマンドでダウンロード、インストールします。

※要記載

redisをインストールすると、以下のコマンドでDBサーバーを立ち上げることができる。

redis-serverの実行

	$ redis-server

特に指定がない場合、ホストが”127.0.0.1:6379″で実行される。これで準備完了である。

ソースコード

ソースコードはTypeScriptで書いています。

app.useのSessionで、storeオプションを書いています。ここに、redisを使うような書き方をしています。
そのようにすることで、ルートにアクセスしたさい、自動でredisにセッションパラメータが追加されます。

では、試しに実行してみます。

実行結果

見えにくいですが、connect.sidというものがcookieに追加されていました。また、redisの状態を以下のようにして確認してみました。

redisの確認

	$ redis-cli -h 127.0.0.1
	> keys *
	1) "dev.blog2El6FiOtFhhBkvOp53io-rVQUGHKnUkg"
	> get dev.blog2El6FiOtFhhBkvOp53io-rVQUGHKnUkg
	"{\"cookie\":{\"originalMaxAge\":null,\"expires\":null,\"httpOnly\":true,\"path\":\"/\"}}"

何かしらのkeyが追加されているのが分かりました。おそらく、ブラウザのconnect.sidを復元したものでしょう。

そのkeyをもとにgetすると、cookieの情報を得られました。ここに、ユーザー情報などをもたせることができれば、ログイン画面よくある値の保持ができるでしょうか。

終わりに

Node.jsでSession情報を保持する方法について解説しました。

はじめDBが必須と思っておらず、SessionIDってどうやって取るんだろうって思っていましたが、サードパーティがよろしくやってくれているみたいですね。
それがわからず数日ずっと悩んでいました。

もともとOAuthに関して調べていたのですが、おそらくこちらもそうなのでしょう。。。。


スポンサーリンク




コメントを残す