【Node.js】 Cookieの取り扱いまとめ
最近流行りのNode.jsですが、Cookieに関して、いくつかお決まりの取り扱い方があり、こんがらがってしまうため、備忘録としてまとめておくのです。。。
Cookieについて
Cookieとは、Webブラウザ内に保存しておくことのできる文字列(データ)です。
これを用いることによって、ブラウザ(ユーザ)に対応する任意のデータを読み書きすることができ、 セッション管理や任意のデータの読み込み、それに応じたレスポンスを返すことなどが可能となります。
Cookieは、HTTPプロトコルでのサーバ・クライアント間での通信の場合、Header 情報の中の Set-Cookie の要素として設定し、送られます。
key-value構成であり、任意のkeyを指定してvalueを読み込むことが出来ます。
Nodeでは、標準でこのCookieを取り扱うための機能が搭載されています。 また、より容易に取り扱いやすくするためのモジュールもいくつか存在します。
フレームワークであるExpressにおいても、標準でCookieを取り扱うための機能が搭載されています。
Node.jsでの利用
Node.jsでCookieを取り扱うとき、大きく分けて以下3つの方法があるのかなと思われます。
- Node標準でのCookieの取り扱い
- npmモジュール(node-cookie)でのCookieの取り扱い
- ExpressでのCookieの取り扱い
それでは順に、それぞれの使い方について見てみるのです。。。
Node標準でのCookieの取り扱い
特にCookie用のモジュール追加などしなくても、取り扱えることは取り扱えます。
直接ヘッダー情報にパラメータを直書きで設定してやればよいのです。
SET
ということでサーバ側でCookieをセットする場合、以下のようにしてレスポンスへヘッダー情報を追記してやるのです。
res.setHeader(‘Set-Cookie’, [<key>= <value>]);
これでせっとしたCookieは、セッションクッキーとして取り扱われます。
GET
クライアントからのリクエストからCookieを取得する場合、以下のようにして取り出します。
var cookie = req.headers.cookie;
変数cookieの内容として、セットされているCookieが以下の形式の文字列となります。
<key1>=<value1>;<key2>=<value2>;
なにもセットされていないならば「undefined」,複数セットされている場合はセミコロン区切りとなります。
ということで、以上をまとめたサンプルコードは以下のようになります。
以上です。 これでもう十分じゃん、とか思うかもしれませんが、色々と困難なことが出てきます。 まずひとつに、やりとりする値にエンコード処理がされていないため、日本語など、英数字以外を使用する場合、このままだと文字化けが発生してうまくいきません。 あと、クライアントからのリクエストからCookieを取得する場合に、特定のCookieの指定などが面倒です。 また、有効期限の設定等、もろもろの細かいオプションの設定をしたい場合も、色々と残念な感じです。
npmモジュール(node-cookie)でのCookieの取り扱い
npmモジュールとして、cookie(https://www.npmjs.org/package/cookie)があります。 このモジュールを使うことで、Cookieのセット(serialize)やパースなどが容易に行えるようになります。 それではモジュールをインストールしてから使ってみます。
$ npm install cookie
SET
以下のようにCookieをシリアライズし、そのオブジェクトをクッキーのヘッダー情報として登録することでセット完了です。
var cookie = require('cookie'); var serialized_cookie = cookie.serialize('test', 'ほげ', { maxAge : 100 //有効期間を100秒に設定 }); //ヘッダーとして設定 <span class="nx">res</span><span class="p">.</span><span class="nx">setHeader</span><span class="p">(</span><span class="s1">'Set-Cookie'</span><span class="p">,</span> <span class="nx">serialized_cookie</span><span class="p">);</span>
この例の場合、「test」というCookieに、「ほげ」という値を設定しています。 また、有効期限として100秒をオプションとして設定しています。
GET
上で設定したCookieを取り出す場合、以下のようにします。
var value = cookie.parse(req.headers.cookie).test;
ヘッダーから取得したCookieをパースしてあげて、あとは特定のkeyを指定してあげれば、対応する値が取得できます。 このモジュールを用いることで、比較的簡単に扱えるようになります。 また、このモジュールでの値のやり取りは、エンコード処理がなされているため、日本語も問題なく取り扱うことが出来ます。 以上より、利用例は以下のようになります。
ExpressでのCookieの取り扱い
サーバでのNodeアプリケーション開発において、フレームワークであるExpressが多く利用されています。
このExpressにおいて、Cookieを容易に扱えるように、ミドルウェアが標準で搭載されています。
以下のように該当のミドルウェアを読み込ませるだけで、あとは簡単にCookieをSET/GETできるのです。
app.use(express.cookieParser());
SET
res.cookie(<key>, <value>, {options});
レスポンスに上記のようにして<key>,<value>,<option>を設定してあげるだけでおk。
GET
var cookie = req.cookies.<key>;
上記のようにして簡単に任意のCookieを取得できます。
まあ実際に具体例で観るのが一番早いかと。。。以下の様な感じになります。
このように、任意のクッキーのSET/GET、削除等、簡単に行うことができるのです。
ミドルウェアを読み込んでいるため、パース処理なども勝手にされており、また、エンコード処理もなされているので、日本語も利用可。
簡単です。。。
まとめ
今回Node.jsでのCookieについてまとめてみましたが、まだ他にもnpmモジュールやsessionミドルウェア等あるようです。。
まぁそれぞれに良さがあると思うので、状況に応じて使い分けたり組み合わせたりしてみましょう、ということで。。。
参考リンク
GoogleAdsense
関連記事
-
-
SSH CA認証まとめ
SSHでの接続を、CA認証でやってみる。 備忘録として残しておくの。。。 概要 Open-SSH
-
-
【Android】代表的な脆弱性まとめ ~ファイルアクセス権について~
近年、スマートフォンの普及に伴い、Android, iPhone, WindowsPhone? ユー
-
-
【Android】難読化ツールProguard設定まとめ
Android開発環境の1つであるEclipseでは、標準でAndroidプロジェクトの難読化ツール
-
-
【Android】APKのデコンパイルまとめ
AndroidのプロジェクトをパッケージングしたAPKファイルをデコンパイル(Javaのソースコード
-
-
Win7, 64bit環境でのcocos2d-x環境構築まとめ
さて、いままでJavaオンリーでゴリゴリとアプリリリースしてきたわけですが、ゲームを作るとなると、ど
-
-
クラックツールHydraでベーシック認証を突破してみる
kali linuxにデフォルトでインストールされているツール「Hydra」を利用して、ベーシック認
-
-
【Androidエラー】Conversion to Dalvik format failed with error 1
Androidにおいて、アプリケーションを作成し終え、いざパッケージをエクスポートっ!!というところ
-
-
genymotionのすすめ
Android開発においてしばしば挙がる不満として、エミュレータのもっさり感があります。 この
-
-
PHPのextensionが読み込まれない問題…
大したあれではないが、ちょっと詰まったのでメモ。。。 事のぼったんは久々にWordPressを
-
-
MySQLでの条件付きSUM,COUNT
以前つっかかったMySQLでの条件付きSUM,条件付きCOUNTについて備忘録。。。 通常、条
GoogleAdsense
- PREV
- クラックツールHydraでベーシック認証を突破してみる
- NEXT
- SSH CA認証まとめ