无法向播放会话添加元素



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

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 中添加新的会话字段,该字段将在下一个事务(即请求-响应)中可用。

最新更新