LoginSignup
1
0

More than 5 years have passed since last update.

CowboyでCookieを扱う

Posted at

CowboyでCookieの使い方を学んだので備忘録的に残しておきます。

はじめに

ErlangやCowboyの環境構築や設定は以下の記事にまとめてるので気になる人はやってみてください。
CowboyでHello Worldのサンプルを動かしてみる

ハンドラーの準備

まずはCowboyで呼び出すハンドラーの準備をします。パスに応じてハンドラーを呼び分けたりしますが今回は全てのリクエストは一つのハンドラーが受けるようにします。

sandbox_app.erl
start(_StartType, _StartArgs) ->
    Dispatch = cowboy_router:compile([
        {'_', [
            {'_', toppage_handler, []}
        ]}
    ]),
    {ok, _} = cowboy:start_clear(http, [{port, 8010}], #{
        env => #{dispatch => Dispatch}
    }),
    sandbox_sup:start_link().

toppage_handlerハンドラーが全てのリクエストを受け止めてくれます。なのでリクエストのたびにこのハンドラーが呼ばれます。
今回はテンプレートエンジンにErlyDTLを使いました。
そしてCowboyを8010ポートで待ち受けるように設定します。

Cookieを扱う

Cookieをセットする

では実際にCookieを扱ってみます。Cowboyのサンプルでもありましたが、Cookieに値のセットと値の取得を繰り返すサンプルになります。ではさらっと全体像を。

toppage_handler.erl
init(Req0, Opts) ->
    NewValue = integer_to_list(rand:uniform(10000)),
    Req1 = cowboy_req:set_resp_cookie(<<"server">>, NewValue,
            Req0, #{path => <<"/">>}),

NewValue = integer_to_list(rand:uniform(10000)),ではランダムな値を取得します。Cookieの値が入れ替わるのを確認するためランダムな値を取っています。

Req1 = cowboy_req:set_resp_cookie(<<"server">>, NewValue, Req0, #{path => <<"/">>}), でCookieに値をセットしています。第一引数の<<server>> はCookieの値、第二引数にCookieの値を入れています。第三引数にReq objectをセットし、第四引数にCookieのオプションを渡します。今回のオプションではCookieのパスを設定しています。
返り値として新しいRep objectを返します。

Cookieの値を取り出す

次は、Cookieの値をハンドラー内で取り出す処理です。

toppage_handler.erl
    #{client := ClientCookie, server := ServerCookie}
        = cowboy_req:match_cookies([{client, [], <<>>}, {server, [], <<>>}], Req1),

#{client := ClientCookie, server := ServerCookie} = cowboy_req:match_cookies([{client, [], <<>>}, {server, [], <<>>}], Req1)で値を取り出します。
返り値にCookieのclientとserverをマップとして返します。第一引数ではどの値を取り出すかを決めます。第一引数は{Cookieのキー名, 制約, デフォルト値}でのタプルのリストを渡しています。

これでCookieの値の取得を行うことができました。

Cookieのオプションたち

最後に、set_resp_cookie のオプションとして設定できるものを記載していきます。

  • max_arg => 失効するまでの時間
  • domain => 有効なドメイン
  • path => Cookieを設定するパス
  • secure => HTTPSのみ有効
  • http_only => HTTPのみ有効

まとめ

簡単ではありましたが、CowboyのCookieの扱い方でした。
もっといろいろしようかと思いましたが、これ以上することがないので(悲しい、、、)。
別の記事でCookieを使っていろいろするのを書こうと思います。

1
0
0

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
  3. You can use dark theme
What you can do with signing up
1
0