2013-01-31 3 views
14

어떻게 플레이가 쿠키의 유효성을 검사합니까?세션과 쿠키는 어떻게 작동합니까?


  • 내가 너라 나는 아직도 내가 데이터베이스에있는 모든 세션 데이터를 presist하지 않는 에도 불구하고 로그인 한 서버를 재시작 한 후.
  • 나는 또한 내가 쿠키의 exipry 날짜가 여전히 내가 로그인 한 것을 크게 서버에서 날짜를 설정할 수 나타났습니다.
  • 내가 을 로그 아웃 (텍스트에 쿠키를 저장 파일) 브라우저가 쿠키를 잃어 버렸습니다. 그런 다음 텍스트 파일에서 쿠키를 다시 만들었고 다시 로그인했습니다.

쿠키는 다음과 같습니다
폐기 특별한 조작이

PLAY_SESSION = e6443c88da7xxxxxxxxxxxxxxxxxxxxxxxxxxxxx - 사용자 ID % 3A1

// My logout code 
def logout() = Action { 
    Ok("").withNewSession 
} 

From the documentation
전체 세션을 폐기 전체 세션 :

Ok("Bye").withNewSession 

답변

5

나는 대답 조문 the documentation을 더주의 깊게 발견하고 다른 부분을 결합했습니다.

세션에 기술적 인 제한 시간이 없습니다. 사용자가 웹 브라우저를 닫을 때 만료됩니다. 특정 애플리케이션의 기능 제한 시간이 필요한 경우 사용자 세션에 타임 스탬프를 저장하고 애플리케이션을 사용해야합니다 (예 : 최대 세션 지속 시간, 최대 비활성 비활성 기간 등).


그것은 세션 및 플래시 데이터가 서버에 저장 을하지 않지만 쿠키 메커니즘을 사용하여, 이후의 각 HTTP 요청에 추가되었는지 이해하는 것이 중요

. 이것은 데이터 크기가 매우 (최대 4KB)로 제한되어 있고 문자열 값만 저장할 수 있다는 것을 의미합니다.

는 그래서 내가 쿠키를 분실하면 사람이 모든 미래를위한 서버에 로그인 할 수 있다는 것을 두려워 무엇을했다.

나는이 자수성가 타임 스탬프 인증을 추가 (쿠키에 타임 스탬프를 저장하고 단절 측 검증) 당신은 사용자를 인증 할 방법을 지정하지 않은

+0

"쿠키가 없어지면 나중에 모든 사람이 서버에 로그인 할 수 있습니다.", 그 의미는 무엇입니까? 쿠키가 없으면 액세스 할 수 없으며 모든 클라이언트 측에서 Play가 (서명 된) 쿠키 자체가 변조되지 않았 음을 보증합니다. – virtualeyes

+1

실종으로 생각하지 마라. 길을 잃었다. – Farmor

+1

미래에 독자들이 더 자세히 조사 할 수 있도록 관련 문서에 링크하십시오. – Cheeso

10

을하는 것입니다 확보해야 할, 그래서 무엇 그냥 짐작할 수 있겠지만 간단한 샘플을 사용하면 간단합니다.

사용자 ID를 사용하여 사용자를 식별하고 서명 된 세션 쿠키가 조작되지 않았는지 확인하여 올바른 서명으로 쿠키를 다시 만들면 여전히 유효합니다.

서버 쪽에서 세션 키의 일부 영역을 즉 작성해야합니다. DB 또는 메모리 캐쉬 (DB보다 빠름). 이 키는 각 성공적인 로그인 작업에 대해 무작위로 생성되어야하며, 사용자, 만료 날짜 등을 식별하기위한 데이터도 포함해야합니다. 다음으로이 임의의 sess_key을 Play 세션에 넣어야합니다. 기록 된 사용자 또는 ID의 전자 메일 주소 DB에서 자신의 행을 삭제하고 로그 아웃 및/또는 만료일 후에 삭제해야합니다. 이 경우 로그 아웃 후에 쿠키를 잃어 버릴지라도 비 식자 [sess_key]로 올바르게 로그인하는 것은 불가능합니다.

AFAIR 표준 메모리 캐시는 DB의 모든 sess_keys뿐만 아니라 당신이 Global object을 사용하고 onStart(...) 방법에 테이블을자를 수 제거됩니다 있는지 확인하기 위해, 응용 프로그램의 다시 시작할 때마다에서 제거됩니다.

+0

Play의 세션 생태계 (인증이 진행되는 한)에 머무르는 것이 현명합니까? Semis-durable 캐시에 redis를 사용하여 sesh id를 관리하고 공개 세션 데이터를 저장하기 위해 Play 세션을 별도로 사용하려고합니다. 좋은 계획 같은이 소리? –

관련 문제