2014-11-21 5 views
0

요약 : 웹 응용 프로그램 (java, jsp & javascript 사용)에서 로그인 시스템을 개발했습니다.웹 응용 프로그램의 클라이언트 측 세션 변수에 대한 더티 읽기

필수 기능 :

사용자가 동시에 같은 브라우저의 두 개의 서로 다른 탭에서 시스템에 로그인 할 수 없습니다. 어떤 사용자라도 "이미 로그인 한 사용자"라는 오류 메시지를 시도합니다.

문제 : 1 단계) 다른/두 번째 탭에서 로그인하려고하면 오류 메시지가 표시되고 예상대로 로그인 페이지로 다시 리디렉션됩니다. 2 단계) 그러면 첫 번째 탭에서 로그 아웃합니다. 백엔드에서 생성 된 모든 세션 변수가 제거됩니다. 3 단계) 그런 다음 다른/두 번째 탭 로그인 페이지에서 로그인을 시도하면 빈 변수 또는 null 변수를 가져올 것으로 예상되는 세션 변수를 다시 얻게됩니다 (로그 아웃 요청에서 백엔드에서 이미 제거 했으므로).

예상 됨 : 두 번째 탭 로그인에 대해 세션 변수를 다시 가져 오면 안됩니다.

+0

브라우저 탭은 동일한 세션을 공유하므로 ... 사용자가 로그인 페이지를 두 번째로 누르는 경우 로그인 후 "집"페이지로 리디렉션해야합니다. – scunliffe

답변

0

세션은 IP 및 사용자 에이전트 (예 : 브라우저)입니다. 따라서 동일한 브라우저에서 여러 탭을 방지 할 수는 없습니다. 당신도 그러고 싶습니다. 디자인에 큰 결함이 있기 때문에이 작업을 수행해야하는 경우. 두 명의 사용자로 자신을 테스트하는 방법을 찾고 있다면 Chrome에서 한 명의 사용자로 로그인하고 Firefox에서는 다른 사용자로 로그인하십시오. 마찬가지로, 로그인 페이지에서

String somevar = session.getAttribute("somevar"); 
if(somevar == null) 
{ 
    response.sendRedirect("loginpage"); 
    return; 
} 

: 여전히 로그 아웃 한 후 페이지에 얻을 수있는과

귀하의 문제는 점점에서 unathenticated 사용자를 방지하기 위해 이런 일을하지 않는 것이 분명하다 사용자가 이미 로그인 한 경우 :

String somevar = session.getAttribute("somevar"); 
if(somevar != null) 
{ 
    response.sendRedirect("mainpage"); 
    return; 
} 

그런 식으로 이미 로그인 한 사용자는 먼저 로그 아웃하지 않고 로그인 양식을 다시 채울 수 없습니다.

캐싱 문제 일 수도 있습니다. 브라우저가 보호 된 페이지를 캐시하도록 허용하면 사용자가 로그 아웃 한 후 페이지로 다시 이동하면 캐시 된 페이지가 표시 될 수 있습니다. 따라서 no-cache 헤더를 설정하십시오 :