2011-04-28 5 views
2

장애 조치를 위해 2 개의 서버를 사용할 수 있습니다. 데이터베이스는 마스터 - 마스터 (Master-Master)로 복제되어 각 서버가 전체 스택의 복사본을 실행합니다. 내가 한 서버에있을 때 세션 테이블이 업데이트되고 요청을 검사 한 후 동일한 PHPSESSID가 전송 된 것을 볼 수 있습니다. 하지만 보조 컴퓨터로 URL이나 장애 조치를 변경하면 세션이 종료되고 다시 로그인해야합니다.PHP 복제 된 데이터베이스 세션 장애 조치

동일한 PHPSESSID 값이 보조 서버에서 전송되지만 세션을 인식 할 수 없습니다. 특정 상자에 세션을 연결하는 Apache/PHP가 있습니까? 그렇다면 어떻게 데이터베이스에 이미있는 세션을 인식하도록 할 수 있습니까?

답변

1

참고 :

이 실제로 해결책을 발견 대답으로 표시하는 대답에 '편집'에서 이전. '문제'는 PHP 설치를 보호하기위한 Suhosin 패치입니다. Suhosin은 장애 조치 서버에 다른 DocRoot가 있었기 때문에 암호 키 및 응용 프로그램의 DocRoot를 기반으로 세션 데이터를 암호화하는 구성 가능한 옵션을 지원하므로 암호화 된 데이터를 읽을 기회가 없었습니다.

suhosin.ini를 편집하여 공유 암호 키를 추가하고 DocRoot 암호화 옵션을 해제하면 세션이 예상대로 공유됩니다.

솔루션을 통해 : http://rommelsantor.com/clog/2011/02/06/php-shared-session-encoding-solution/

0

$_SESSION을 사용하는 경우 해당 서버에 연결됩니다. 쿠키를 사용하여 세션 ID를 추적 한 다음 DB의 세션과 다시 일치시켜야합니다.

+0

@drowe이 PHP 함수 검토 : http://php.net/manual/de/function.session-set-save-handler.php – SteAp

+0

나는 $ _SESSION을 사용하고, 그리고 PHPSESSID에 데이터베이스의 ID와 일치하는 쿠키 값이 있습니다. 그러나 PHP가 세션 데이터를 사용하려고 시도하면 borks가됩니다. 어떤 부분이 특정 서버에 묶여 있습니까? 그리고 한 서버가 다른 서버의 세션 데이터를 인식하도록 무시할 수 있습니까? – drowe

+0

세션의 작동 방식을 읽어야합니다. PHP의 세션은 클라이언트에게 쿠키를 통해 토큰을 부여한 다음 디스크의 $ _SESSION에 데이터를 저장하여 작동합니다. 클라이언트가 다시 연결하면 디스크에 저장된 데이터로 세션 토큰을 재결합합니다. – JohnD