이 글은 주로 PHP에서 SESSION의 생존 저장 시간을 수정하는 방법을 소개합니다. 관심 있는 친구들이 참고하면 도움이 될 것입니다.
SESSION의 수명을 수정하는 방법
Session의 수명을 수동으로 설정해 보겠습니다.
<?php session_start(); // 保存一天 $lifeTime = 24 * 3600; setcookie(session_name(), session_id(), time() + $lifeTime, "/"); ?>
실제로 Session은 Session의 수명을 설정하는 session_set_cookie_params() 함수도 제공합니다. session_start() 함수가 호출되기 전에 호출됩니다.
<?php // 保存一天 $lifeTime = 24 * 3600; session_set_cookie_params($lifeTime); session_start(); $_SESSION["admin"] = true; ?>
클라이언트가 IE 6.0을 사용하는 경우 session_set_cookie_params() 함수는 쿠키를 설정하는 데 몇 가지 문제가 있으므로 여전히 setcookie 함수를 수동으로 호출하여 쿠키를 만듭니다.
php의 세션 만료 시간 설정
인터넷의 많은 사람들이 대답을 했습니다: PHP 구성 파일에서 session.gc_maxlifetime을 수정하세요. 세션 재활용 메커니즘에 대해 더 자세히 알고 싶다면 계속해서 읽어보세요. (이 글의 환경은 php5.2입니다.)
개요: 모든 PHP 요청은 "세션 재활용"을 트리거할 확률(기본값)이 1/100입니다. "세션 재활용"이 발생하면 /tmp/sess_* 파일이 확인됩니다. 마지막 수정 시간이 1440초(gc_maxlifetime 값)를 초과하면 삭제되며, 이는 해당 세션이 만료되었음을 의미합니다.
1. 세션은 서버 측(일반적으로 PHP 모듈이 있는 Apache)에 어떻게 존재합니까?
기본적으로 PHP는 세션을 /tmp 디렉터리에 저장하며 파일 이름은 sess_01aab840166fd1dc253e3b4a3f0b8381과 같습니다. 각 파일은 세션에 해당합니다. + File , 해당 세션이 만료되었음을 의미합니다.
2. 세션은 클라이언트 측(일반적으로 브라우저)에 어떻게 존재하나요?
세션은 브라우저 측에 있으므로 세션 ID(서버 측에서 생성된 고유 ID)만 저장하면 됩니다. 저장하는 방법에는 쿠키와 URL의 두 가지가 있습니다. 쿠키에 세션ID가 저장되어 있으면 브라우저의 쿠키에 PHPSESID 변수가 있는 것을 확인할 수 있습니다. URL로 전달되면
"현재"에 대한 "마지막 수정 시간"이 gc_maxlifetime(기본값은 1440)초를 초과하면 세션 파일이 만료된 것으로 간주됩니다. 파일이 변경되지 않은 경우 다음 세션 재활용 중에 세션 파일이 삭제됩니다. (세션이 만료됩니다). 간단히 말하면, 웹사이트에 로그인하고 1440초(기본값) 이내에 아무런 조작이 없으면 해당 세션이 만료된 것으로 간주됩니다.
그러므로 php.ini 파일의 gc_maxlifetime 변수를 수정하여 세션 만료 시간을 연장합니다. (예: 만료 시간을 86400초로 수정합니다.)
session.gc_maxlifetime = 86400그런 다음 웹 서비스를 다시 시작합니다(일반적으로 아파치). 참고: PHP5는 세션이 만료되면 재활용 메커니즘을 사용합니다. 여기에 설정된 시간은 86400초입니다. 86400초 이내에 세션이 수정되지 않으면 다음 "재활용"까지 삭제되지 않습니다.
3. 세션 "재활용"은 언제 발생하나요?
기본적으로 모든 PHP 요청에 대해 재활용 확률은 1/100이므로 간단히 "100개의 PHP 요청마다 한 번의 재활용이 발생합니다"라고 간단히 이해하면 됩니다. 이 확률은 다음 매개변수에 의해 제어됩니다#概率是gc_probability/gc_pisor session.gc_probability = 1 session.gc_pisor = 100참고 1: 이 경우 gc_maxlifetime=120이라고 가정합니다. 세션 파일이 120초 전에 마지막으로 수정된 경우 다음 번에 재활용됩니다(1/ 100 확률) 이 문제가 발생하기 전에는 세션이 여전히 유효합니다.
참고 2: 세션이 session.save_path를 사용하여 세션을 다른 곳에 저장하는 경우 세션 재활용 메커니즘이 만료된 세션 파일을 자동으로 처리하지 못할 수 있습니다. 이때 만료된 세션을 정기적으로 수동(또는 crontab)으로 삭제해야 합니다. cd /path/to/sessions; find -cmin +24 | "마지막 수정 시간"이므로 세션이 활성화되어 있지만 세션 내용이 변경되지 않으면 해당 세션 파일이 변경되지 않습니다. 재활용 메커니즘은 이를 오랫동안 활성화되지 않은 세션으로 간주하여 삭제합니다. 이는 우리가 보고 싶지 않은 문제입니다. 다음과 같은 간단한 코드를 추가하면 이 문제를 해결할 수 있습니다.
<?php if(!isset($_SESSION['last_access'])||(time()-$_SESSION['last_access'])>60) $_SESSION['last_access'] = time(); ?>코드는 60초마다 세션 수정을 시도합니다. 요약: 세션 만료 시간을 수정하려면 gc_maxlifetime 변수를 수정하면 됩니다. PHP5의 세션은 수동적 재활용 메커니즘(가비지 수집)을 사용합니다. 만료된 세션 파일은 저절로 사라지지 않지만, 만료된 세션은 "재활용"을 트리거하여 처리됩니다.
위 내용은 이 글의 전체 내용입니다. 모든 분들의 공부에 도움이 되었으면 좋겠습니다.
관련 추천:
위 내용은 SESSION의 생존 저장 시간을 수정하는 PHP 메소드의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!