我正在尝试向播放会话添加一个简单的字符串,但它不起作用。为了进行测试,我编写了一个小控制器函数,该函数首先向会话添加一个字符串,然后打印会话包含的所有元素,但它始终为空。
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 或其他东西激活某些东西吗?
实际上,会话也是一个不可变的结构。
确实,存储在request
对象中的session
对象具有+
方法,后者通过返回Session
的新实例来尊重不变性范式。保持request.session
不变。
更进一步思考,我们可以断言这样一个事实,即更新的会话只有在另一个请求-响应事务中重用时才有意义......
因此,更新会话的方法是在构建响应时更新它(Result
在 Play 中),如下所示:
Ok("just a test").withSession(request.session + ("token", "foobar"))
这将在您的 cookie 中添加新的会话字段,该字段将在下一个事务(即请求-响应)中可用。