PHP 세션이 작동하지 않는 해결 방법: 먼저 페이지 시작 부분에서 "session_save_path()" 함수를 호출한 다음 세션이 저장된 디렉터리를 전용 디렉터리로 지정합니다.
추천: "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 중국어 웹사이트의 기타 관련 기사를 참조하세요!