2009-04-13 3 views
4

Java EE 응용 프로그램에서 세션에 문제가 있습니다. 다른 사용자는 응용 프로그램에 로그인 할 수 있으며 지정된 사용자는 권한이있는 데이터를 볼 수 있습니다. 그는 다른 사용자 데이터를 볼 수 없어야합니다. 사용자를 차별화하기 위해 Client_ID을 사용하고 있습니다. 곧 우리의 사용자 로그는 데이터베이스에서이 Client_ID를 가져 오는이 같은 세션을 설정하고 같이Java EE에서 세션을 어떻게 관리 할 수 ​​있습니까?

session.setAttribute("Client_ID",user.getClient_ID()) 

우리는 응용 프로그램 전체에서이 세션 값에 액세스하고 Client_ID에 관련 데이터를 가져 오는. 이 문제는 사용자가 단일 브라우저에서 작업 할 때 제대로 작동하지만 문제는 다음과 같습니다.

SuperAdmin이 있고 그 아래 모든 클라이언트를 볼 필요가 있다고 가정합니다. SuperAdmin은 client_1으로 로그인하고 다시 client_2으로 로그인합니다. SuperAdmin은 동일한 브라우저를 사용하여 두 번 로그인했습니다. client_1 브라우저를 새로 고치면 client_2 세부 정보가 표시됩니다.

우리 응용 프로그램이 동일한 브라우저에서 두 개의 서로 다른 로그인에 동일한 세션을 사용하고 있다고 생각합니다. 이 문제에 대한 해결책은 무엇입니까? 내가 페이지를 새로 고칠 때 특정 클라이언트에 대한 올바른 데이터를 볼 수 있어야합니다.

답변

7

세션 ID를 저장하는 데 쿠키를 사용하지 말고 대신 요청 매개 변수를 사용하십시오. 열린 각 탭은 자체 세션을 요청합니다. 쿠키를 사용하면 브라우저의 모든 탭에 대해 하나의 쿠키 만 사용할 수 있습니다.

피씨 : 동일한 브라우저에서 2 명 이상의 사용자가 동시에 로그인하는 것은 잘못된 것 같습니다. 응용 프로그램은 client_1이 이미 서명했음을 감지하고 로그 아웃 할 때까지 동일한 브라우저에서 다른 사용자를 위해 로그인합니다. 예를 들어, Google 애플리케이션은 이러한 방식으로 작동합니다. SuperAdmin에 로그인하지 않고 client_1 또는 client_2 데이터를 볼 수있는 기능이 있으면 좋을 것입니다. 이렇게하면 수십 개의 암호를 기억하지 않아 업무 성과가 향상됩니다 (시간은 돈이 아닌가?).

+0

맞아요. –

1

동일한 브라우저 인스턴스 내의 여러 탭에서 다른 것을 보려는 경우 세션 관리 및 URL의 주요 사항을 다시 작성해야합니다.

세션은 브라우저 탭간에 공유되므로 대부분의 브라우저에서 true로 설정되므로 한 탭으로 로그인하면 다른 탭의 세션에 영향을줍니다.

1

해결 방법은 여러 로그인 대신 역할을 사용하는 것입니다. client_1 SuperAdmin 역할을 부여하고 클라이언트 2는 제공하지 않습니다. 이렇게하면 두 번 로그인 할 필요가 줄어 듭니다.

하지만 어쨌든 한 번에 한 명의 사용자 만 로그인 할 수 있도록해야합니다. 로그인하는 과정에서 이전 세션이 무효화되어야합니다. Java EE에서 정확한 코드를 잊어 버렸지 만, 이것은 session.invalidate()과 같습니다.

관련 문제