2011-11-28 2 views
1

내 asp.net 세션 객체가 SQL 서버에 저장됩니다. 세션 중에 ID을 저장하고 있습니다. 클라이언트가 다른 브라우저를 열고 다른 ID을 세션에 저장하는 경우 동일한 기본 사용자 로그인 사용자에서 "ID가 열려 있는지 확인 하시겠습니까?"라는 고객에게 알려야합니다.asp.net의 여러 브라우저에서 서버 세션 핸들?

우리가 어떻게 asp.net에서 확인 가능 (익명되지 않음) 로그인 한 사용자에

응용 프로그램 실행?

+2

새 창을 열지 않은 동일한 고객이 사이트에 방문하는 것이 아니라는 사실을 어떻게 알리시겠습니까? –

+0

로그인 ID를 사용하면 누가 로그인했는지 알 수 있습니다. – James123

+2

정보를 알 수 있도록 사람들이 로그인하고 있음을 설명하기 위해 질문을 편집하여 확장 할 수 있습니다. 그렇지 않으면 마치 익명 사용자가 새 창을 열 것을 요구하는 것처럼 읽습니다. –

답변

2

이것에 대해 갈 수있는 몇 가지 방법이 있습니다 : 사용자 테이블에

옵션 # 1, "세션 ID"

라는 값을 추가 확인 사용자가 로그인 무엇을 볼 때 자신의 마지막 세션 ID는입니다. 그런 다음 여전히 유효한 세션인지 테스트하십시오. 그렇다면 무엇을하고 싶은지 물어보십시오. 로그인 할 때마다 해당 테이블에 최신 세션 ID를 저장하십시오.

그러나 옵션 # 2 :하지 마십시오. 사용자가 응용 프로그램에 액세스하기 위해 여러 개의 브라우저 창을 열고 싶으면 해보십시오. 아마도 꽤 좋은 이유가있을 것입니다. 대부분의 (거의 모든) 사용자는 "세션 상태"가 무엇을 의미하는지 전혀 모르고 있으며 실제로 알고 싶어하지 않습니다. 그들이 관심을 갖는 것은 모두 일을 끝내는 것입니다.

+0

귀하의 옵션 # 2는 "방법"이 아니라 "무엇"입니까? OP는 각 단일 사용자가 여러 세션을 가질 수있는 상황을 처리하는 방법을 요구하고 있습니다. 같은 이유로, 옵션 # 1도 잘 작동하지 않습니다. 어떤 방법으로도 세션 하이재킹을하지 않으면 다른 세션의 정보에 액세스 할 수 없습니다. 나는 OP의 경우 임시 데이터를 저장하는 유일한 방법은 캐시를 사용하는 것이라고 믿는다. – Andrey

4

세션이 인증 된 사용자와 연결되어 있지 않으며 세션 ID를 모른 채 다른 세션의 세션에 액세스 할 수 없습니다.

일반적으로 이러한 종류의 문제는 세션 상태 대신 캐시를 사용하여 해결할 수 있습니다. 캐시를 사용하면 데이터 저장을 위해 사용자 고유의 키를 만들 수 있습니다. 한 서버에서 또는 웹 팜 환경에서 웹 응용 프로그램을 실행할 것인지에 따라 asp.net in-process 캐시 또는 수많은 분산 캐시 솔루션 중 하나를 사용할 수 있습니다 (예 : mycached에서 사용하는 memcached). 큰 성공을 거둔 웹 프로젝트).