memcache를 사용하여 thinkPHP의 세션 데이터를 여러 도메인 이름과 공유하는 방법
이 기사의 예에서는 memcache를 사용하여 thinkPHP의 세션 데이터를 여러 도메인 이름과 공유하는 구현 방법을 설명합니다. 참고를 위해 모든 사람과 공유합니다. 세부 사항은 다음과 같습니다.
1. 문제의 원인
약간 큰 웹사이트에는 일반적으로 여러 개의 서버가 있으며, 각 서버는 서로 다른 기능을 가진 모듈을 실행합니다. 2차 도메인 이름이지만 고도로 통합된 웹사이트의 경우 사용자 시스템이 통합되어 있습니다. 즉, 일련의 사용자 이름과 비밀번호를 로그인하여 전체 웹사이트의 각 모듈에서 사용할 수 있습니다. 각 서버가 사용자 데이터를 공유하는 것은 상대적으로 쉽습니다. 백엔드에 데이터베이스 서버를 배치하기만 하면 각 서버는 통합된 인터페이스를 통해 사용자 데이터에 액세스할 수 있습니다. 그러나 여전히 문제가 있습니다. 즉, 사용자가 이 서버에 로그인한 후 다른 서버의 다른 모듈에 들어갈 때 다시 로그인해야 합니다. 이는 일회성 로그인이며 모든 일반적인 문제는 다음과 매핑됩니다. 실제로는 다양한 서버 간에 SESSION 데이터를 공유하는 방법입니다.
2. PHP SESSION의 작동 원리
문제를 해결하기 전에 먼저 PHP SESSION의 작동 원리를 이해해 봅시다. 클라이언트(예: 브라우저)가 웹 사이트에 로그인하면 방문한 PHP 페이지는 session_start()를 사용하여 SESSION을 열 수 있으며, 이는 클라이언트의 고유 식별 SESSION ID를 생성합니다(이 ID는 session_id 함수를 통해 얻거나 설정할 수 있음) ()). 세션 ID는 두 가지 방법으로 클라이언트에 유지될 수 있습니다. 따라서 다른 페이지를 요청할 때 PHP 프로그램은 클라이언트의 세션 ID를 학습할 수 있습니다. 하나는 기본적으로 세션 ID를 GET URL 또는 POST 양식에 자동으로 추가하는 것입니다. 아래에서 변수 이름은 PHPSESSID이고, 다른 하나는 COOKIE를 통해 SESSION ID를 저장하는 것입니다. 기본적으로 이 COOKIE의 이름은 PHPSESSID입니다. 여기서는 COOKIE 방식이 널리 사용되기 때문에 설명을 위해 주로 사용합니다.
그럼 SESSION 데이터는 어디에 저장되나요? 물론 서버 측에서는 메모리에 저장하는 대신 파일이나 데이터베이스에 저장됩니다. 기본적으로 php.ini에 설정된 SESSION 저장 방식은 파일(session.save_handler = files) 즉, SESSION 데이터는 파일을 읽고 쓰는 방식으로 저장되며, SESSION 파일이 저장되는 디렉터리는 세션별로 지정됩니다. save_path이며 파일 이름은 접두사 sess _로 시작하고 그 뒤에 SESSIONID가 옵니다(예: sess_c72665af28a8b14c0fe11afe3b59b51b). 파일의 데이터는 직렬화 후의 SESSION 데이터입니다. 방문 횟수가 많으면 더 많은 SESSION 파일이 생성될 수 있습니다. 이 경우 SESSION 파일을 저장하기 위한 계층적 디렉터리를 설정하면 효율성이 크게 향상됩니다. session.save_path=" N;/save_path", N은 계층적입니다. 레벨, save_path는 시작 디렉터리입니다. SESSION 데이터를 쓸 때 PHP는 클라이언트의 SESSION_ID를 얻은 다음 이 SESSION ID를 사용하여 지정된 SESSION 파일 저장 디렉터리에서 해당 SESSION 파일을 찾습니다. 존재하지 않는 경우 이를 생성하고 마지막으로 데이터를 직렬화하여 씁니다. 파일. SESSION 데이터를 읽는 것도 비슷한 작업 프로세스입니다. 읽은 데이터를 역직렬화해야 하며 해당 SESSION 변수가 생성됩니다.
3. 다중 서버 공유 SESSION의 주요 장애물과 해결 방법
SESSION의 작동 원리를 이해하면 기본적으로 각 서버가 동일한 클라이언트를 공유한다는 것을 알 수 있습니다. 예를 들어 동일한 사용자 브라우저의 경우 서버 A에서 생성된 SESSION ID는 30de1e9de3192ba6ce2992d27a1b6a0a이고, 서버 B에서 생성된 SESSION ID는 c72665af28a8b14c0fe11afe3b59b51b입니다. 또한, PHP의 SESSION 데이터는 본 서버의 파일 시스템에 별도로 저장됩니다.
문제를 파악한 후 문제 해결을 시작할 수 있습니다. SESSION 데이터를 공유하려면 두 가지 목표를 달성해야 합니다. 하나는 동일한 클라이언트에 대해 각 서버에서 생성한 SESSION ID가 동일해야 하며 동일한 COOKIE를 통해 전달될 수 있어야 한다는 것입니다. 동일한 SESSION ID를 읽습니다. PHPSESSID라는 쿠키는 모든 서버에서 액세스할 수 있는 SESSION 데이터의 저장 방법/위치입니다. 간단히 말해서 여러 서버가 클라이언트의 SESSION ID를 공유하고 서버의 SESSION 데이터도 공유해야 합니다.
첫 번째 목표의 구현은 실제로 매우 간단합니다. COOKIE의 도메인을 특별히 설정하기만 하면 됩니다. 기본적으로 COOKIE의 도메인은 현재 서버의 도메인 이름/IP 주소이며, 도메인은 다음과 같습니다. 서로 다를 경우 각 서버에서 설정한 COOKIE는 서로 접근할 수 없습니다. 예를 들어 www.aaa.com 서버는 www.bbb.com 서버에서 설정한 COOKIE를 읽고 쓸 수 없습니다. 여기서 이야기하고 있는 동일한 웹사이트의 서버는 고유한 특성을 가지고 있습니다. 즉, 동일한 1차 도메인에 속합니다. 예를 들어 Tieba.xiaoyuan.com과 www.xiaoyuan.com은 모두 .xiaoyuan 도메인에 속합니다. .com, 그런 다음 COOKIE의 도메인을 .xiaoyuan.com으로 설정하여 Tieba.xiaoyuan.com, www.xiaoyuan.com 등이 이 COOKIE에 액세스할 수 있도록 할 수 있습니다. PHP 코드에서의 설정 방법은 다음과 같습니다.
<?php ini_set('session.cookie_domain', '.xiaoyuan.com'); ?>
이로써 동일한 클라이언트 SESSION ID를 공유하는 각 서버의 목적이 달성됩니다.
두 번째 목표는 파일 공유를 사용하여 달성할 수 있습니다. 해결 방법에는 두 가지가 있는데, 하나는 데이터 저장 세션을 사용하는 것이고, 다른 하나는 Memcache를 사용하는 것입니다. 여기서는 MEMCACHE를 이용하여 해결해보세요.
이미 세션에 대한 Memcache 액세스를 지원하는 thinkphp 프레임워크를 사용합니다. memcache 서버를 설정한 후 구성 파일에 memcache의 IP와 포트만 설정하고 COOKIE_DOMAIN 매개변수를 지정하면 됩니다. 일반적인 방법으로 세션을 운영하세요. 이때 여러 도메인 이름으로 세션을 공유할 수 있습니다.
이 글이 ThinkPHP 프레임워크를 기반으로 하는 모든 분들의 PHP 프로그래밍에 도움이 되기를 바랍니다.
Memcache를 사용하여 여러 도메인 이름으로 세션 데이터를 공유하는 thinkPHP 구현 방법에 대한 자세한 내용은 PHP 중국어 웹사이트를 참고하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











springboot 프로젝트 프로덕션 세션아웃 시간 초과에서 문제가 발견되었습니다. 문제 설명: 테스트 환경에서는 세션아웃 구성이 적용되었는지 확인하기 위해 application.yaml을 변경하여 세션아웃을 구성했습니다. , 프로덕션 환경에 도착하면 만료 시간이 8시간으로 직접 설정되었습니다. 그런데 정오에 고객으로부터 프로젝트 만료 시간이 짧게 설정되어 있다는 피드백을 받았습니다. 30분 동안 아무 작업도 수행하지 않으면 세션이 만료되어 반복 로그인이 필요합니다. 개발 환경 처리 문제를 해결합니다. springboot 프로젝트에는 Tomcat이 내장되어 있으므로 프로젝트의 application.yaml에 구성된 세션 아웃이 효과적입니다. 프로덕션 환경: 프로덕션 환경 릴리스는 다음과 같습니다.

세션 실패는 일반적으로 세션 수명 만료 또는 서버 종료로 인해 발생합니다. 해결 방법은 다음과 같습니다. 1. 세션 수명을 연장합니다. 3. 쿠키를 사용합니다. 4. 세션 관리 미들웨어를 사용합니다.

PHPSession의 도메인 간 문제 해결 프런트엔드와 백엔드 분리 개발에서 도메인 간 요청이 표준이 되었습니다. 도메인 간 문제를 처리할 때 일반적으로 세션 사용 및 관리가 포함됩니다. 그러나 브라우저 원본 정책 제한으로 인해 기본적으로 도메인 간에 세션을 공유할 수 없습니다. 이 문제를 해결하려면 도메인 간 세션 공유를 달성하기 위한 몇 가지 기술과 방법을 사용해야 합니다. 1. 도메인 간 세션을 공유하기 위한 쿠키의 가장 일반적인 사용

새로 고침 후 PHP 세션이 사라지는 문제에 대한 해결 방법: 1. "session_start();"를 통해 세션을 엽니다. 2. 모든 공개 구성을 PHP 파일에 작성합니다. 3. 변수 이름은 배열 첨자와 같을 수 없습니다. 4. phpinfo에서 세션 데이터의 저장 경로를 확인하고 파일 디렉터리의 sessio가 성공적으로 저장되었는지 확인합니다.

세션 PHP의 기본 만료 시간은 1440초(24분)입니다. 즉, 클라이언트가 24분 이상 새로 고치지 않으면 사용자가 브라우저를 닫으면 현재 세션이 만료되고 세션이 종료됩니다. 세션이 더 이상 존재하지 않습니다.

문제: 오늘 프로젝트에서 설정 시간 초과 문제가 발생했으며 SpringBoot2의 application.properties에 대한 변경 사항이 적용되지 않았습니다. 해결 방법: server.* 속성은 SpringBoot에서 사용하는 내장 컨테이너를 제어하는 데 사용됩니다. SpringBoot는 ServletWebServerFactory 인스턴스 중 하나를 사용하여 서블릿 컨테이너의 인스턴스를 생성합니다. 이러한 클래스는 server.* 속성을 사용하여 제어되는 서블릿 컨테이너(tomcat, jetty 등)를 구성합니다. 애플리케이션이 Tomcat 인스턴스에 war 파일로 배포되면 server.* 속성이 적용되지 않습니다. 적용되지 않습니다.

1. 세션 기반 SMS 로그인 구현 1.1 SMS 로그인 흐름도 1.2 SMS 인증코드 전송 구현 프런트엔드 요청 설명: 요청 방법 설명 POST 요청 경로/사용자/코드 요청 매개변수 전화(전화번호) 반환 값 백엔드 인터페이스 없음 구현: @Slf4j@ ServicepublicclassUserServiceImplextendsServiceImplimplementsIUserService{@OverridepublicResultsendCode(Stringphone,HttpSessionsession){//1인 경우 휴대폰 번호를 확인합니다.

JavaScript쿠키 JavaScript 쿠키를 사용하는 것은 선호도, 구매, 커미션 및 기타 정보를 기억하고 추적하는 가장 효과적인 방법입니다. 더 나은 방문자 경험이나 웹사이트 통계를 위해 필요한 정보입니다. PHPCookieCookies는 클라이언트 컴퓨터에 저장되고 추적 목적으로 보관되는 텍스트 파일입니다. PHP는 HTTP 쿠키를 투명하게 지원합니다. JavaScript 쿠키는 어떻게 작동하나요? 귀하의 서버는 쿠키 형태로 방문자의 브라우저에 일부 데이터를 보냅니다. 브라우저는 쿠키를 허용할 수 있습니다. 존재하는 경우 방문자의 하드 드라이브에 일반 텍스트 기록으로 저장됩니다. 이제 방문자가 사이트의 다른 페이지에 도달하면
