【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

関連記事

nerdtree

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

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

記事を読む

android_kitkat

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

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

記事を読む

MySQLでの条件付きSUM,COUNT

以前つっかかったMySQLでの条件付きSUM,条件付きCOUNTについて備忘録。。。 通常、条

記事を読む

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

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

記事を読む

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

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

記事を読む

genymotion_logo

genymotionのすすめ

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

記事を読む

android_secure

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

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

記事を読む

hydra

クラックツールHydraでベーシック認証を突破してみる

kali linuxにデフォルトでインストールされているツール「Hydra」を利用して、ベーシック認

記事を読む

dordoidくん

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

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

記事を読む

bash設定ファイルについてまとめてみた

仮想環境を組んだ時に、環境変数が所どころ未設定なことがあった。 環境変数の設定にはbashの設定フ

記事を読む

GoogleAdsense

Message

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

GoogleAdsense

openssh
SSH CA認証まとめ

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

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

最近流行りのNode.jsですが、Cookieに関して、いくつ

hydra
クラックツールHydraでベーシック認証を突破してみる

kali linuxにデフォルトでインストールされているツール「Hyd

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

パスワードクラッキングツールである「JOHN THE RIPPER」の

宇部空港
久々の帰省・・・

宇部空港にて[/caption] たまには普通の日記を。。。

→もっと見る

PAGE TOP ↑