2008-09-16 2 views
20

PHP는 세션 정보를 해당 세션을 설정하는 서버 호스트의 파일 시스템에 저장합니다. 여러 호스트 PHP 환경에서로드가 각 호스트간에 미미하게 분산되어있는 경우 PHP 세션 변수를 각 요청에 사용할 수 없습니다 (우연히 동일한 호스트에 요청을 할당하지 않는 한 -로드 밸런서를 제어 할 수 없다고 가정) .여러 호스트에서 PHP 사이트의 세션을 처리하는 가장 좋은 방법은 무엇입니까?

This site, dubbed "The Hitchhikers Guide to PHP Load Balancing"은 PHP 세션 처리기를 무시하고 세션 정보를 공유 데이터베이스에 저장하도록 제안합니다.

겸손한 의견으로는 여러 PHP 호스트 환경에서 세션 정보를 유지하는 방법은 무엇입니까?

업데이트 : 감사합니다. 예제 코드를 찾는 사람은 useful tutorial on writing a Session Manager class for MySQL을 찾아 냈습니다.

답변

14

데이터베이스 또는 데이터베이스 + Memcache. 일반적으로 말하면 세션을 자주 작성하면 안됩니다. 세션 데이터에 이 변경되었을 때만 db에 쓰는 데이터베이스 솔루션으로 시작하십시오.. Memcache는 나중에 성능 향상으로 추가해야합니다. db 솔루션은 기본 키를 찾고 있기 때문에 매우 빠릅니다. db가 테이블 잠금이 아닌 행 잠금을 가지고 있는지 확인하십시오 (myISAM). MemCache는 나쁜 아이디어입니다 ... 오버플로, 충돌 또는 다시 시작되면 사용자가 로그 아웃됩니다.

+0

DB + memcached가 최상의 솔루션입니다. DB보다 더 많이 충돌하는 것을 두려워하지 않습니다. 오버플로되면 가장 오래된 레코드부터 시작해야하므로 강제 로그 아웃은 가장 게으른 사용자에게만 수행됩니다. 드물게 발생하지 않는 한 그렇게 나쁘지 않다. – Javier

1

공유 데이터베이스에 세션 데이터를 저장해도 속도는 느려질 수 있습니다. 정말 큰 사이트 인 경우 memcache을 사용하는 것이 좋습니다.

1

프로젝트 예산에 따라 다른 훌륭한 기능 외에도 생산 기계에 Zend Platform을 고려할 수 있습니다. 구성 가능한 세션 클러스터링은 CDN처럼 작동합니다.

2

무엇을 하든지간에 서버를 하나만 사용하거나 1 + 1 장애 조치 시나리오에서 서버에 저장하지 마십시오. 너를 막 다른 골목에 빠뜨릴거야.

저장/검색에 Database + Memcache를 사용하면 Zend의 이해를 방해 할 수 있습니다. (그리고 Zend와 관련하여 어떤 일이 벌어 지는지 믿습니다). MySQL을 사용하는 경우에도 UserID 또는 SessionID로 쉽게 파티션 할 수 있기 때문에 매우 확장 성이 좋습니다.

(편집 : 추가, DB +에서 Memcache로가는 것은 어느 PHP로 당신을 결합하지 않습니다하는 COMERCIAL 파티에 당신을 결합하지 않습니다 - 뭔가 당신은 길 아래에 대한 행복 할 수있는) 내가 동의 althought

+0

PHP에 묶이지 않는 것에 대한 좋은 지적. 따라서 PHP의 기본 형식이 아닌 JSON으로 세션을 직렬화 할 가치가 있습니다. –

관련 문제