LoginSignup
23
22

More than 5 years have passed since last update.

Phoenix Framework docs/sessions読んだ。

Last updated at Posted at 2015-06-09

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
23
22
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
23
22