1

Cookie リクエスト ヘッダーから、以前に Play セッションに保存した値を直接掘り下げようとしています。

Http.Context.current().session().put("my-fancy-key", "some-interesting-value");

play.mvc.Http.Cookie にアクセスできる play.mvc.Http.Request にしかアクセスできませんが、そこからつまずきます。

このスニペットは機能しません... ヒントはありますか?

注: 私は、Play フレームワークにないオブジェクトを使用することに完全にオープンです。Netty には Cookie の r/w 関数があり、それらを調べています...おそらく javax に直接何かありますか?

String playSessionCookieName = Configuration.root().getString("session.cookieName", "PLAY_SESSION");

Http.Cookie playSessionCookie = r.cookie(playSessionCookieName);

if (playSessionCookie != null) {
   // FIXME: What to do here to get my value?

   Logger.debug("Found the cookie! Serialized value: " + playSessionCookie.value());
   try {
      ObjectInputStream objIn = new ObjectInputStream(new ByteArrayInputStream(playSessionCookie.value().getBytes()));
      Http.Session session = (Http.Session) objIn.readObject();

      // Here's the goal
      Logger.debug("Found my value: " + session.get("my-fancy-key"));

   } catch (Exception e) {
      Logger.warn("Couldn't deserialize the value.", e);
   }
}
4

3 に答える 3

2

シンプルを使用してセッション値を取得しない理由はわかりませんがsession(key)、セッション Cookie からセッション値を取得する必要がある場合は、そのようなものを使用できます (play 2.0)。

String cookieVal = request().cookies().get("PLAY_SESSION").value();
cookieVal = cookieVal.substring(cookieVal.indexOf("-")+1);
for(String a: cookieVal.split("%00")) {
    String[] k = a.split("%3A");
    // k[0] - session key; k[1] - session value
    Logger.info(k[0] + " = " + k[1]);
}
于 2013-01-09T13:51:45.240 に答える
0

Cookieにはメソッドvalue()があります。それがあなたが望むことをするかどうかはわかりませんが、私はそこから始めます。

于 2013-01-09T12:49:40.783 に答える
0

結果にアクセスできる場合は、Cookie ではなく、結果に保存されているセッションを反復処理する方が簡単な場合があります。

Session resultSession = play.test.Helpers.session(result);

for (Entry<String, String> entry : resultSession.entrySet()) {
    System.out.println("key:" + entry.getKey() + " value:" + entry.getValue());
}
于 2014-02-10T12:53:44.900 に答える