2010-05-06 6 views
1

단일 사인온 프로세스를 만들려고합니다. 필자가 구현 한 방법은 세션 데이터를 데이터베이스에 저장하는 방법을 사용합니다.새 세션 ID를 생성하는 PHP SSO (Single Sign On)

새 사용자가 웹 사이트 (www.example2.com)에 올 때 인증 표가 확인됩니다. 이것이 처음으로 웹 사이트를 방문한 것이므로 일치하지 않습니다.

브라우저가 인증 서버 www.example1.com/authenticate.php?session_id=ABC123에 표시됩니다. 여기서 ABC123은 www.example2.com에서 생성 된 세션 ID를 나타냅니다. 그런 다음 www.example1.com에서 생성 된 세션 ID는 URL에 설정된 매개 변수를 사용하여 세션 ID 옆에 저장됩니다.

사용자는 www.example2.com으로 다시 리디렉션되며 세션 ID가 일치해야합니다.

FireFox에서는 정상적으로 작동하지만 Chrome에서 시도했을 때 브라우저가 www.example2.com으로 다시 리디렉션 될 때 생성되는 세션 ID가 새로운 세션 ID임을 알게되었습니다. 결과적으로 무한 루프가 생성됩니다. 이 동작은 FireFox에서도 자체적으로 나타납니다.

새 세션 ID가 생성되는 원인은 무엇입니까? 더 중요한 것은 그것을 막기 위해 무엇을 할 수 있습니까?

미리 감사드립니다.

편집
무한 루프를 일으키는 논리적 오류가 발생했습니다. 이것은 이제 FireFox에서 다시 정상적으로 작동하지만 Chrome과 Internet Explorer에서 무한 루프가 계속 발생합니다.

답변

-1

코드의 논리를 따르면서 몇 가지 수정을했습니다. 모든 것이 지금 일하는 것 같습니다. 이게 왜 파이어 폭스에 영향을 미치는지 혼란스러워합니다.

감사합니다.

+0

어떻게 해결 했습니까? Chrome 및 세션 ID와 동일한 문제가 있습니다. – Lancelot

+0

예. 솔루션을 공유 할 경우 유용합니다. – soupdiver

0

세션의 전체 개념은 하나의 도메인에만 적용된다는 것입니다. 그렇지 않으면 다른 도메인이 세션을 가로 챌 수 있습니다. 브라우저는 기록되지 않은 도메인에 대한 쿠키 (세션 ID 포함)를 제출해서는 안됩니다. ie www.yourbank.com 로그온에 대한 세션 ID는 www.preatesteallingtheieves.com이라는 웹 사이트에서 읽을 수 없으므로 브라우저가이 문제를 방지합니다. (사용하는 세션 이름에 관계없이)

SO : 같은 이름을 지정해도 세션 ID는 도메인간에 공유되지 않습니다.

+0

세션 이름을 변경하는 중입니다. 나는 "인증 서버"와 "중개인"이 설정 한 세션 ID를 저장하고 데이터베이스 내에 2의 맵을 작성하는 중이다. 따라서 인증 서버는 글로벌 세션 데이터 (예 : 사용자 ID)와 관련이 있으며 브로커는 사이트 특정 세션 데이터 (예 : 이미지 보안 문자)를 보유합니다. – bigstylee

관련 문제