无法向Play会话添加元素

时间:2012-08-08 15:53:22

标签: scala playframework playframework-2.0

我正在尝试将一个简单的字符串添加到播放会话中,但它无法正常工作。为了测试我写了一个小控制器函数,首先在会话中添加一个字符串,之后,它打印会话包含的所有元素,但它总是为空。

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或其他东西激活一些东西吗?

1 个答案:

答案 0 :(得分:9)

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

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

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

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

Result

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