凤凰专场debugging/configuration

Phoenix session debugging/configuration

即使是 Phoenix 中最基本的会话操作,我也遇到了麻烦。例如,如果我生成股票 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: 

我是否需要做一些额外的配置才能在会话中存储值? Stock 应用程序在浏览器管道中获取会话,所以我假设没有更多事情要做,但也许我错了?

由于 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 而是 returns 一个新的 Plug.Conn,它与旧参数在本质上是相同的,除了新的 key/value 对。

要使文本正确显示,您需要将 conn 分配给方法的输出

 conn = put_session(conn, key, value)