Отладка / настройка сеанса Phoenix - PullRequest
0 голосов
/ 13 января 2019

У меня проблемы даже с самыми основными сессионными операциями в Фениксе. Например, если я создаю стандартное приложение Phoenix (1.4), и единственное изменение, которое я делаю, это page_controller.ex, индексное действие которого теперь выглядит так:

 def index(conn, _params) do
   put_session(conn, :franch, "foo")
   text(conn, "session is: #{get_session(conn, :franch)}")
 end

когда я запускаю сервер и перехожу на эту страницу, я вижу:

session is: 

Есть ли какая-то дополнительная конфигурация, которую мне нужно сделать, чтобы иметь возможность хранить значения в сеансе? Стандартное приложение выбирает сеанс в конвейере браузера, поэтому я предположил, что больше ничего не нужно делать, но, возможно, я ошибаюсь?

1 Ответ

0 голосов
/ 13 января 2019

Поскольку Elixir является функциональным языком программирования, переменные являются неизменяемыми. Это означает, что вы гарантированно получите одно и то же значение до и после вызова метода, если только вы не переназначите переменную:

foo = "Hello"
AnyModule.anyMethod(foo) 
foo # You are guaranteed that foo still points to the value "Hello"

Единственный способ заставить переменную foo ссылаться на какое-либо значение, отличное от того, которое ей присвоено в данный момент, - это переназначить ее:

foo = "Hello"
foo = MyModule.addThere(foo)
foo # "Hello There"

Таким образом, put_session(conn, key, value) не может изменить переданный параметр conn, вместо этого он возвращает новый Plug.Conn, который по существу совпадает со старым, за исключением новой пары ключ / значение.

Для правильного отображения текста необходимо назначить conn для вывода метода

 conn = put_session(conn, key, value)
...