【Node.js】 Cookieの取り扱いまとめ

公開日: : Node.js, 備忘録

node_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

関連記事

【Androidエラー】Conversion to Dalvik format failed with error 1

Androidにおいて、アプリケーションを作成し終え、いざパッケージをエクスポートっ!!というところ

記事を読む

android_secure

【Android】代表的な脆弱性まとめ ~ファイルアクセス権について~

近年、スマートフォンの普及に伴い、Android, iPhone, WindowsPhone? ユー

記事を読む

android_kitkat

Android4.4(API19)KitKatでのGraphicalLayout,AdMob問題

Androidの新バージョンKitKatがリリースされてもう結構経つが、いまさら我が開発環境でも導入

記事を読む

PHPのextensionが読み込まれない問題…

大したあれではないが、ちょっと詰まったのでメモ。。。 事のぼったんは久々にWordPressを

記事を読む

openssh

SSH CA認証まとめ

SSHでの接続を、CA認証でやってみる。 備忘録として残しておくの。。。 概要 Ope

記事を読む

genymotion_logo

genymotionのすすめ

Android開発においてしばしば挙がる不満として、エミュレータのもっさり感があります。 この

記事を読む

dordoidくん

【Android】難読化ツールProguard設定まとめ

Android開発環境の1つであるEclipseでは、標準でAndroidプロジェクトの難読化ツール

記事を読む

nerdtree

Vimプラグイン「NERDTree」設定・コマンド備忘録

Vimのプラグインである「NERDTree」について、設定・コマンドを備忘録としてまとめておきます。

記事を読む

【Android】APKのデコンパイルまとめ

AndroidのプロジェクトをパッケージングしたAPKファイルをデコンパイル(Javaのソースコード

記事を読む

john the ripper

パスワードクラックツール JOHN THE RIPPER 使い方まとめ

パスワードクラッキングツールである「JOHN THE RIPPER」の使い方を備忘録としてまとめてお

記事を読む

GoogleAdsense

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

GoogleAdsense

PAGE TOP ↑