Phoenix会话调试/配置

时间:2019-01-12 23:45:59

标签: elixir phoenix-framework

我甚至在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应用程序在浏览器管道中获取会话,因此我以为没有其他事情要做,但是也许我错了?

1 个答案:

答案 0 :(得分:0)

由于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,它与旧的Plug.Conn基本上相同,只是具有新的键/值对。

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

 conn = put_session(conn, key, value)