2013-01-09 35 views
1

我試圖通過如何獲得會話中的密鑰值?

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

我到play.mvc.Http.Request唯一通道從cookie請求頭我以前存儲在播放錄音的值直接從挖我能夠去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); 
    } 
} 

回答

2

我不知道爲什麼你不使用簡單的session(key)獲取會話值,但是如果你需要從會話cookie獲取會話值你可以使用類似的東西(玩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]); 
} 
+0

感謝您的幫助。我試圖避免做字符串解析(希望將某些東西烘焙到API中),但它運行良好。 – joewyrembelski

+0

關於「......不知道爲什麼你不使用簡單的會話(關鍵)...」,答案是:「因爲你沒有清楚地閱讀問題或者其他任何評論題。」 – joewyrembelski

0

Cookie有一個方法值()。我不知道它是否做到了你想要的,但我會從那裏開始。

+0

在我提出的代碼示例,我拉來自cookie的值(查找:playSessionCookie.value())。問題是,遊戲會話cookie包含多個值...我的假設(在我發佈的代碼片段中)是這些值是序列化的映射子類:Http.Session。如果我是對的,那麼我對它們進行反序列化的方式是不正確的。如果我錯了,那麼我就吠了錯誤的樹。 – joewyrembelski

+0

啊對不起,沒注意到。然而,我發現所有的例子只是從會話中獲得這樣的值:String value = session(「key」); – Jakob

+0

對!一旦我參加了會議(或其代表的地圖),我將很樂意。我的根本問題是,我只從cookie值開始(只是表示播放會話對象的字符串...而不是實際的對象本身)。我的問題是:我如何轉換/反序列化/將該字符串解壓縮爲我可以使用的某個東西? – joewyrembelski

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()); 
}