2011-02-01 6 views
0

제가 로그인 시나리오가있는 asp.net 웹 사이트를 구축 중이라고 가정 해 봅시다. 사용자가 이미 컴퓨터 1에 로그인하여 컴퓨터 2에 로그인하려고 시도하면 자동으로 컴퓨터 1에서 로그 아웃하는 동안 컴퓨터 2에 로그인 할 수 있도록 웹 사이트에 특정 기능을 제공하려고합니다.최신 로그온 세션이 유지되고 사용자가 다른 세션에서 자동으로 로그 아웃됩니다.

또한 http는 상태없는 매체이므로 사용자가 컴퓨터 1과 상호 작용하여 해당 페이지와 상호 작용하려고 시도 할 때마다 그 사실을 알게됩니다.

+0

모든 페이지 상호 작용에서 데이터베이스에 대해 이야기합니까? InProc, StateServer, SQL 또는 사용자 정의 세션 상태를 사용하고 있습니까? (두 개의 질문은 관련이 없으며, 지금 막 모호한 아이디어를 생각하고 있습니다.) –

+0

음, 예, 모든 페이지의 데이터베이스와 거의 이야기하고 있습니다. 아직도 우리는 세션을 유지할 곳을 결정하지는 않았지만, 아마도 InProc 메커니즘에있을 것입니다. – Zohaib

답변

1

추가 데이터 (현재 '로그인 한 컴퓨터')를 데이터베이스 또는 응용 프로그램 상태로 저장해야합니다. 그런 다음 인증 요청을 처리 할 때 - 저장 한 시스템이 인증 요청중인 컴퓨터와 일치하는지 확인하십시오. 그렇지 않은 경우 사용자가 로그인하여 새 컴퓨터 (IP 주소)를 데이터베이스/응용 프로그램에 저장해야합니다 상태.

+0

기업 수준에서 프록시 서버를 사용하고 있으며 솔루션이 파손되므로 컴퓨터 (IP 주소)를 사용할 수 없습니다. – Zohaib

+0

대신 UserId를 사용하여 sessionId를 사용할 수 있습니다. 인증 할 때 sessionId가 저장된 최신 세션과 일치하는지 확인하고, 로그인 페이지로 리디렉션하지 않으면 sessionId가 종료됩니다. 또한 Furqan이 아래에서 다루는 세션 쿠키에 GUID를 추가하여이 작업을 수행 할 수 있습니다. – Tony

1

Tony의 제안이 목적을 충족시키지 못하는 경우 "UserLoginName"+ "HOST_NAME"+ "TIME"(또는 원하는 조합)으로 구성된 해시를 생성하고 해당 해시를 해당 loginName에 대해 데이터베이스에 저장해야합니다 해시를 쿠키로 사용자에게 보냅니다. 후속 요청에서 처리기 또는 모듈을 통해 특정 쿠키가 제출되고 데이터베이스와 일치하는 값이 포함되어 있는지 확인할 수 있습니다. 일치하는 경우 사용자는 동일한 컴퓨터에서 들어오고 사용자가 아닌 경우 아무것도 업데이트 할 필요가 없습니다 다른 컴퓨터에서 쿠키가 없어 지거나 다른 해쉬 값을 포함하게되므로 로그인 페이지로 다시 보내야하며 로그인시 해시를 다시 만들고 데이터베이스에서 로그인에 맞게 업데이트해야합니다. 희망이 작동합니다.

관련 문제