2

我正在尝试向播放会话添加一个简单的字符串,但它不起作用。为了测试,我编写了一个小控制器函数,首先将一个字符串添加到会话中,然后打印会话包含的所有元素,但它始终为空。

def foo = Action { request =>
  request.session + ("token", "foobar")
  request.session.data.foreach{ keyVal => println("\tkey value pair: " + keyVal._1 + ", " + keyVal._2)}
  Ok("just a test")
}

我做错了什么?我是否需要通过 application.conf 或其他方式激活某些内容?

4

1 回答 1

9

实际上,会话也是一个不可变的结构。

确实,session存储在request其中的对象有一个+方法,后者通过返回一个新的实例来尊重不变性范式Session。保持request.session不变。

进一步思考,我们可以断言更新的会话只有在另一个请求-响应事务中重用时才有意义......

因此,更新会话的方法是在构建响应(Result在 Play 中)时更新它,如下所示:

Ok("just a test").withSession(request.session + ("token", "foobar"))

这将在您的 cookie 中添加新的会话字段,该字段将在下一个事务中可用(即请求-响应)。

于 2012-08-08T19:15:23.320 回答