无法向Play会话添加元素

sch*_*hub 2 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")
}
Run Code Online (Sandbox Code Playgroud)

我做错了什么?我需要通过application.conf或其他东西激活一些东西吗?

and*_*lla 9

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

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

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

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

Ok("just a test").withSession(request.session + ("token", "foobar"))
Run Code Online (Sandbox Code Playgroud)

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