我正在尝试将一个简单的字符串添加到播放会话中,但它无法正常工作。为了测试我写了一个小控制器函数,首先在会话中添加一个字符串,之后,它打印会话包含的所有元素,但它总是为空。
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或其他东西激活一些东西吗?
答案 0 :(得分:9)
实际上,会话也是一个不可变的结构。
存储在session
中的request
对象确实有+
方法,后者通过返回{{1}的新实例来尊重不变性范例。 }。保持Session
不变。
进一步思考,我们可以断言更新的会话在另一个请求 - 响应事务中重用时才有意义......
因此,更新会话的方法是在构建响应时更新它(Play中为request.session
),如下所示:
Result
这将在您的cookie中添加新的会话字段,该字段将在下一个事务中提供(即请求 - 响应)。