2013-01-09 3 views
1

나는 내가 play.mvc.Http.Request 만 액세스 할 수세션에서 키 값을 얻는 방법은 무엇입니까?

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

를 통해 내가 이전에 플레이 세션에 저장 한 값으로 쿠키 요청 헤더에서 직접 발굴을 시도하고있어 어떤에서 I 그 연극에 갈 수있을 것 같아. 쿠키. 쿠키 ...하지만 거기서 나는 비틀 거린다.

이 스 니펫이 작동하지 않습니다. 힌트가 있습니까?

참고 : 저는 Play 프레임 워크에없는 개체를 사용하고 있습니다. Netty가 쿠키 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)을 사용하여 세션 값을 얻지 못하는 이유는 모르지만 세션 쿠키에서 세션 값을 가져와야하는 경우 (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

쿠키의 메소드 값()이 있습니다. 나는 네가 원하는 것을하지 않으면 내가 그곳에서 시작할 것이라고 모른다.

+0

내가 인한 코드 샘플을, 내가 당겨 오전 쿠키의 값 (look for : playSessionCookie.value()). 문제는 재생 세션 쿠키에 여러 값이 포함되어 있다는 것입니다. 내 가정 (내가 게시 한 코드 스 니펫에서)은 해당 값이 직렬화 된 맵 하위 클래스 인 것입니다. Http.Session. 내가 맞다면 내가 비 직렬화하는 방식이 잘못되었습니다. 내가 틀렸다면 잘못된 나무를 짖어 버렸다. – joewyrembelski

+0

아, 죄송합니다. 그러나 모든 예제에서는 다음과 같이 세션에서 값을 가져옵니다. String value = session ("key"); – Jakob

+0

오른쪽! 세션 (또는 그것이 나타내는지도)에 손을 가져 가면 갈 수 있습니다. 내 근본적인 문제는 쿠키 값 (세션 개체를 나타내는 문자열 ... 실제 개체 자체가 아닙니다.)로 시작한다는 것입니다. 내 질문은 : 어떻게 변환 할/deserialize/그 문자열 작업 할 수있는 무언가로 압축 풀기? – joewyrembelski

0
당신이 결과에 액세스 할 수있는 경우, 대신 쿠키의 결과에 저장된 세션을 통해 반복하는 것이 더 쉬울 수 있습니다

:

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

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