>백엔드 개발 >PHP 문제 >PHP 세션이 작동하지 않으면 어떻게 해야 할까요?

PHP 세션이 작동하지 않으면 어떻게 해야 할까요?

藏色散人
藏色散人원래의
2020-08-22 09:17:322833검색

PHP 세션이 작동하지 않는 해결 방법: 먼저 페이지 시작 부분에서 "session_save_path()" 함수를 호출한 다음 세션이 저장된 디렉터리를 전용 디렉터리로 지정합니다.

PHP 세션이 작동하지 않으면 어떻게 해야 할까요?

추천: "PHP 비디오 튜토리얼"

PHP 세션 실패 이유

최근 회사 프로젝트에서 세션 실패 문제가 발생했습니다. 몇 분. 나중에 나는 그것을 오랫동안 온라인에서 읽고 그 메커니즘을 이해했습니다. 세션은 Lunix의 공개 경로에 저장되므로 프로그램에 세션 응용 프로그램이 많으면 서로 영향을 미치게 됩니다.

나중에 session.gc_maxlifetime을 수정하려고 시도했지만 이 매개변수가 기본적으로 작동하지 않는 것을 발견했습니다. 기본적으로 PHP의 세션 정보는 시스템의 임시 파일 디렉터리에 텍스트 파일 형식으로 저장됩니다. 이 경로는 구성 매개변수 session.save_path에 의해 지정됩니다. Linux에서는 이 경로가 일반적으로 tmp이고, Windows에서는 일반적으로 C:WindowsTemp입니다. 서버에 여러 PHP 애플리케이션이 있는 경우 동일한 session.save_path 매개변수를 사용하기 때문에 동일한 디렉터리에 세션 파일을 저장합니다. 마찬가지로 이러한 PHP 애플리케이션도 특정 확률로 GC를 시작하고 모든 세션 파일을 검색합니다.

 문제는 GC가 작동할 때 다른 사이트의 세션을 구분하지 못한다는 것입니다. 예를 들어 사이트 A의 gc_maxlifetime은 2시간으로 설정되고 사이트 B의 gc_maxlifetime은 기본값 24분으로 설정됩니다. 사이트 B의 GC가 시작되면 공개 임시 파일 디렉터리를 검색하고 사이트 A 또는 B에서 가져온 것인지 여부에 관계없이 24분보다 오래된 모든 세션 파일을 삭제합니다. 이런 식으로 사이트 A의 gc_maxlifetime 설정은 쓸모가 없습니다.

따라서 구체적인 작업은 각 프로젝트마다 고유한 세션 경로가 있다는 것입니다. 문제를 찾아 해결하는 것은 매우 간단합니다. 페이지 시작 부분에서 session_save_path() 함수를 호출하면 session.save_path 매개변수를 수정하고 세션이 저장되는 디렉터리를 tmpmyapp과 같은 전용 디렉터리로 지정할 수 있습니다. 이러한 방식으로 gc_maxlifetime 매개변수가 정상적으로 작동합니다.

특정 코드:

session_start();
ini_set('session.save_path','/tmp/');
//6个钟头
ini_set('session.gc_maxlifetime',21600);
//保存一天
$lifeTime = 24 * 3600;
setcookie(session_name(), session_id(), time() + $lifeTime, "/");

위 내용은 PHP 세션이 작동하지 않으면 어떻게 해야 할까요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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