2010-02-10 9 views
3

단일 데이터베이스와 통신하는 여러 도메인에 대한 로그인 및 등록을 구현 중입니다. i.domain-a.comi.domain-b.com이라고 부릅니다. 두 하위 도메인 모두 DNS에 단일 서버를 가리키는 A 레코드가 있습니다. 따라서 i.domain-a.com/hello.phpi.domain-b.com/hello.php이 같은 것을 실행합니다.동일한 서버, 다른 도메인에서 다른 세션 필요

따라서 도메인 A에서 세션을 만들면 도메인 B로 이동하여 동일한 세션 정보를 검색 할 수 있습니다. 두 가지 모두에 대해 완전히 별도의 로그인 시스템을 구현하려면 등록을 처리하기 위해 작성한 것과 동일한 PHP 함수를 사용합니다. $_SERVER['HTTP_HOST']을 기반으로 session_name()을 사용해야합니까? 내 상황이 this guy과 얼마나 유사한 지 잘 모르겠다.이 질문이 너무 유사하지 않기를 바란다.

+0

내가뿐만 아니라, 내가 물어 봤어야 추측 : 다른'session_name()'각 도메인에 대한 합리적인 옵션이 아닙니다을 사용하는 경우,이 문제를 처리하는 가장 좋은 방법은 무엇입니까? –

+0

당신은 또한 모든 도메인에있는 PHP 응용 프로그램의 첫 번째 줄에 "session.cookie_domain"[type : string] 런타임 지시문 (init_set())을 설정할 수 있습니다 (내 대답은 아래에 있지만 session_name() 함수에 대한 호출이 사용됩니다) – Andreas

답변

2

세션에 문제가 발생하지 않게하려면 session_name ('myapplication') [session_name ({UNIQUE_APP_ID})]을 사용해야합니다.

귀하가 언급하는 문제는 웹 사이트 사용자를위한 관리 패널과 로그인 양식이있는보다 간단한 상황에서 발생할 수 있습니다.

session_name을 사용하지 않으면 로그인 한 사용자가 관리자에게 액세스 할 수 있습니다. 패널이지만 인증에 따라 다릅니다. 구성 및 메커니즘 구현했습니다.

관련,

0

아니요. 동일한 세션을받는 다른 사용자를 중지시키는 메커니즘은 호스트 이름별로가 아니라 서버별로 작동합니다.

+0

따라서, 같은 서버의 각 도메인에 대한 세션을 분리하기 위해'session_start();'전에'session_name ($ _ SERVER [ 'HTTP_HOST']); –

+0

위의 구현으로 방문 할 때마다 새로운 ID가 생성된다는 사실을 깨달았습니다. 이는 이상적이지 않습니다. 세션이 만료되거나 파괴 될 때까지 동일한 ID를 원합니다. 이러한 신속한 답변에 대한 사과 ... –

2

세션/쿠키는 도메인에 따라 다르며 DNS 설정에 의존하지 않습니다. 별도의 도메인에 살면서 두 시스템의 세션을 분리하려면 이미 설정되어 있습니다.

저는 session_name()이 실제로 다른 사람의 질문에 대한 최상의 솔루션이었을 것이라고 믿습니다. 동일한 도메인에서 두 개의 개별 세션이 있습니다.

+0

감사. 나는'i.domain-a.com/session.php'과'i.domain-a.com/session.php'에 가면 현재 세션 ID를 보여주는 디버그 페이지를 가지고있다. 같은 것을 보아라. session_start();'앞에'session_name ($ _ SERVER [ 'HTTP_HOST']);를 쓰면 각 도메인마다 다른 ID를 얻습니다. –

+0

i.domain-a.com/session.php와 i.domain-a.com/session.php가 같은 페이지이기 때문입니다. – Quentin

+0

세션 ID는 서버마다 다르지만 쿠키는 도메인마다 다릅니다. 사용자의 쿠키 (각 도메인 당 하나씩)는 고유 한 세션 ID를 가리키고 있으므로 겹치는 부분을 피할 수 있습니다. 세션 변수와 그 변수를 표시하는 스크립트를 설정하는 스크립트를 설정하십시오. 한 도메인에서 첫 번째 도메인을 실행하고 두 번째 도메인을 다른 도메인에서 실행하면 두 번째 도메인은 동일한 도메인에서 실행될 때까지 첫 번째 도메인의 값을 가져 오지 않아야합니다. – nortron

관련 문제