>  기사  >  백엔드 개발  >  PHP는 다중 서버 SESSION 공유를 구현합니다.

PHP는 다중 서버 SESSION 공유를 구현합니다.

不言
不言원래의
2018-04-21 09:29:461837검색

이 글의 내용은 다중 서버 SESSION 공유를 구현하는 PHP에 대한 내용입니다. 이제는 모든 사람과 공유합니다. 도움이 필요한 친구들이 참고할 수 있습니다.

PHP는 다중 서버 SESSION 공유를 구현합니다

필요합니다


요즘에는 약간 더 큰 웹사이트에는 기본적으로 www.feiniu.com, search.feiniu.com, member.feiniu.com과 같은 여러 하위 도메인이 있습니다. 이러한 웹사이트가 사용자 로그인 정보를 공유해야 한다면 필요합니다. 물론 이 세션 공유를 수행하려면 동일한 기본 도메인이 있어야 한다는 전제가 있습니다.

PHP 세션 원리

클라이언트는 PHP 페이지에 접속하여 session_start를 실행하고 session_id를 생성합니다. 일반적으로 우리는 session_id를 쿠키에 저장하고, 클라이언트가 다른 페이지에 접속할 때 세션 내용이 서버에 저장됩니다. session_id는 서비스 터미널로 전달되며, session_id를 통해 세션 콘텐츠를 얻습니다.

프로세스는 이와 같지만 서로 다른 서버는 동일한 클라이언트에 대해 서로 다른 session_id를 생성하므로 서로 다른 서버는 동일한 세션 콘텐츠를 얻을 수 없습니다. 또한, PHP의 기본 SESSION 데이터는 이 서버의 파일 시스템에 별도로 저장됩니다.

따라서 세션 공유를 해결하려면 두 가지 문제를 해결해야 합니다.

1. 여러 서버가 동일한 session_id를 사용합니다

这个比较容易解决,只要在php中设置存session_id的cookie域名为网站主域就可以了
打开PHP.ini, 设置session.cookie_domain = .feiniu.com, 
当然也可以在php代码当中设置ini_set("session.cookie_domain","feiniu.com");
  • 1

  • 2

  • 3

  • 4

3 . 스토리지 엔진 선택 방법

  • 기본 파일 스토리지: 이 세션 삭제 방법은 동시성이 높거나 삭제 시간이 긴 경우 많은 양의 세션을 삭제하는 데 사용됩니다. 파일은 SESSION 디렉터리에 생성됩니다. 물론 설정할 수 있습니다. 계층적 디렉터리에는 SESSION 파일이 저장됩니다. 이로 인해 두 가지 문제가 발생합니다. 첫째, 파일을 찾는 속도가 느리고, 둘째, 각 디렉터리에 수용할 수 있는 파일 수가 제한되어 새 SESSION이 저장되지 않을 수 있습니다.

  • 데이터베이스 저장: 세션을 데이터베이스에 저장하면 가비지 컬렉터에 의해 세션 데이터가 삭제되는 것을 방지할 수 있으며, 세션 데이터를 견고하게 보관할 수 있습니다. 그러나 데이터베이스를 사용하여 세션을 동기화하면 데이터베이스의 IO가 증가하고 데이터베이스에 대한 부담이 늘어납니다. 게다가 데이터베이스 읽기 및 쓰기 속도가 느리기 때문에 세션을 적시에 동기화하는 데 도움이 되지 않습니다.

  • memcache 저장:

  • 이러한 방식으로 세션을 동기화하면 데이터베이스에 대한 부담이 증가하지 않으며 세션을 메모리에 넣는 것이 파일에서 많이 읽는 것보다 빠릅니다. 의.

그러나 Memcache는 메모리를 여러 사양의 저장 블록으로 나눕니다. 각 블록에는 크기가 있습니다. 또한 이 방법은 Memcache가 메모리를 완전히 활용할 수 없으며 저장 블록이 부족할 경우 메모리 조각을 생성한다고 판단합니다. 오버플로

  • "분산"할 필요가 없거나 공유할 필요가 없거나 단순히 서버가 하나만 있을 정도로 작은 애플리케이션의 경우 memcached는 어떤 이점도 가져오지 않습니다. 반대로 시스템 속도를 저하시킵니다. 네트워크 연결에도 리소스가 필요하기 때문에 효율성이 향상됩니다.

  • Redis 저장소: Memcache에 비해 Redis 액세스는 약간 느립니다. 장점은 다음과 같습니다.

    • redis는 더 많은 데이터 구조를 지원하고 배열이나 객체를 저장할 수 있지만 Memcache는 문자열만 저장할 수 있습니다. 세션 머신이 다시 시작되면 memcache의 모든 사용자는 세션을 다시 얻어야 하지만 redis는 그렇지 않습니다.

    • 사용자가 갑자기 유입되고 데이터가 많아지면 세션을 저장하는 머신의 메모리가 가득 찼습니다. , Memcache가 작동하고 모든 키가 만료되지 않은 경우 마지막으로 작성된 데이터를 계속 덮어쓰는 반면 Redis는 속도만 느려지고 프로그램 논리에 영향을 주지 않습니다

    • 관련 권장 사항:

    다중 서버를 구현하는 PHP 세션 공유 NFS 공유 방법_PHP 튜토리얼

    위 내용은 PHP는 다중 서버 SESSION 공유를 구현합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

    성명:
    본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
    이전 기사:PHP 인쇄 추적다음 기사:PHP 인쇄 추적