2012-08-08 49 views
2

我想添加一个简单的字符串到播放会话,但它只是不工作。为了测试,我写了一个小控制器函数,它首先向会话中添加一个字符串,然后打印会话包含的所有元素,但始终为空。无法添加元素播放会话

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或其他东西来激活某些内容?

回答

9

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

是存储在request一个session对象具有+方法这是真的,后者是通过返回的Session一个新实例尊重不变性范式。保持request.session不变。

思考了一步,我们可以断言对更新的会议只有在另一个请求响应的业务重复使用时的感觉的事实...

所以更新会话的方式是更新它,而建立响应(Result在播放),这样的:

Ok("just a test").withSession(request.session + ("token", "foobar")) 

这将增加新的会话领域中的Cookie,这将是在未来交易(即请求 - 响应)提供。

+0

谢谢你的回答。现在事情对我来说更加清楚。 – schub 2012-08-08 19:28:47

+0

没问题!这就是存在!而且我知道这些东西起初并不容易理解......我可能会在我的书中特别关注这一点。 – 2012-08-08 20:13:18

+0

@andypetrella,如何将字段(元素)列表添加到会话?谢谢。 – Way 2015-07-23 09:07:46