Playframework 2.0 如何在会话中获取密钥的值?

Playframework 2.0 如何在会话中获取密钥的值?,playframework-2.0,Playframework 2.0,我正试图直接从Cookie请求头挖掘到一个我以前通过存储在播放会话中的值 Http.Context.current().session().put("my-fancy-key", "some-interesting-value"); 我只能访问play.mvc.Http.Request,从中我可以访问play.mvc.Http.Cookie。。。但从那里我绊倒了 这段代码不起作用。。。暗示 注意:我完全愿意使用不在Play框架中的对象。我看到Netty有cookie r/w功能,我正在研究这些

我正试图直接从Cookie请求头挖掘到一个我以前通过存储在播放会话中的值

Http.Context.current().session().put("my-fancy-key", "some-interesting-value");
我只能访问play.mvc.Http.Request,从中我可以访问play.mvc.Http.Cookie。。。但从那里我绊倒了

这段代码不起作用。。。暗示

注意:我完全愿意使用不在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);
   }
}

Cookie有一个方法值()。我不知道它是否符合您的要求,但我想从这里开始。

我不知道为什么您不使用简单的
会话(键)
来获取会话值,但是如果您需要从会话cookie获取会话值,您可以使用类似的方法(播放2.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());
}
sessionresultsession=play.test.Helpers.Session(结果);
for(条目:resultSession.entrySet()){
System.out.println(“key:+entry.getKey()+”值:+entry.getValue());
}

在我提出的代码示例中,我从cookie中提取值(查找:playsessioncokie.value())。问题是播放会话cookie包含多个值。。。我的假设(在我发布的代码片段中)是这些值是一个序列化的映射子类:Http.Session。如果我是对的,那么我反序列化它们的方式是不正确的。如果我错了,那我就找错人了。啊,对不起,我没注意到。然而,我发现的所有示例都是这样从会话中获取值的:String value=session(“key”);正确的!一旦我掌握了会话(或它所代表的地图),我就可以开始了。我的基本问题是,我只从cookie值开始(只是表示播放会话对象的字符串…而不是实际对象本身)。我的问题是:如何将该字符串转换/反序列化/解压为我可以使用的内容?嗯,既然你说你只能访问Http.Request,那么我真的帮不了你。我会尝试在play用户组中发布一个问题,他们通常回答得很快。谢谢你的帮助。我试图避免进行字符串解析(希望在API中加入一些东西),但它工作得很好。关于“…不知道为什么不使用简单会话(键)…”,答案是:“因为您没有清楚地阅读问题或关于该问题的任何其他注释。”
Session resultSession = play.test.Helpers.session(result);

for (Entry<String, String> entry : resultSession.entrySet()) {
    System.out.println("key:" + entry.getKey() + " value:" + entry.getValue());
}