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または他の何かを介して何かをアクティブ化する必要がありますか?

4

1 に答える 1

9

実際、セッションも不変の構造です。

1つにsession格納されているオブジェクトにメソッドがあることは事実です。後者は、の新しいインスタンスを返すことにより、不変性のパラダイムを尊重しています。変更しないでください。request+Sessionrequest.session

さらに一歩考えてみると、更新されたセッションは、別の要求/応答トランザクションで再利用された場合にのみ意味があるという事実を主張できます...

Resultしたがって、セッションを更新する方法は、次のように、(Playで)応答を作成しながらセッションを更新することです。

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

これにより、Cookieに新しいセッションフィールドが追加され、次のトランザクション(つまり、要求/応答)で使用できるようになります。

于 2012-08-08T19:15:23.320 に答える