2012-08-08 35 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