Phoenix Frameworkの公式ドキュメントのSessionsを簡単に訳しつつ補足
#Cookie
Phoenixはsession cookie storeをサポートしていて簡単に利用できる。
以下の設定をアプリケーションに追加すれば良い
# my_app/config/prod.exs
use Mix.Config
config :phoenix, MyApp.Endpoint,
...
secret_key_base: "..."
config :phoenix, MyApp.Router,
session: [store: :cookie,
key: "_your_app_key"]
##補足
ただ、lib/app_name/endpoint.ex
に以下の記述がある。
plug Plug.Session,
store: :cookie,
key: "_appname_key",
signing_salt: "****"
prod.exsに追記しなくても、Using the session dataで掲載しているように、put_session, get_sessionをControllerで呼び出してやると動作する。
prod.exに追記する内容についてはまだ調べきれてない。
#ETS
PhoenixはErlang Term Storage(ETS)を用いてサーバサイドセッションをサポートする。
ETSを利用したセッションの設定には、ETS tableをアプリケーション実行時に作成するように以下の設定を追加する
# my_app/lib/my_app.ex
def start(_type, _args) do
:ets.new(:session, [:named_table, :public, read_concurrency: true])
...
ETSセッションをEndpointで利用するには以下の設定を加える
# my_app/lib/my_app/endpoint.ex
plug Plug.Session,
store: :ets,
table: :session,
...
##ETSについて
28. Bears, ETS, Beets
インメモリデータベースなので、再起動したりすると揮発するし複数台のWebサーバで運用すると通信できなさそうなので、memcahed、MySQL、Redis辺りをsession storageとして利用したほうが良さそう。
#Using the session data
アプリケーションコントローラからsessionにアクセスする例
defmodule MyApp.PageController do
use Phoenix.Controller
def show(conn, _params) do
conn = put_session(conn, :foo, "bar")
foo = get_session(conn, :foo)
text conn, foo
end
end