오늘 세션을 검토한 후 더 잘 이해하게 되었으며, 몇 가지 의문점이 생겼습니다. 분석할 수 있도록 도와주세요.
<올>첫 번째 질문은 PHP에서 세션에 가비지 수집 메커니즘이 있다는 것입니다. 원칙적으로 가비지 수집 메커니즘은 session_start
가 트리거되는 횟수만큼 트리거될 수 있다는 것입니다. 그래서 내 질문은 내 세션이 1440초를 지났지만 재활용이 즉시 트리거되지 않거나 5분 이내에 트리거되지 않은 경우에도 이 시점에서 세션 데이터를 얻을 수 있느냐는 것입니다.
두 번째 질문은 세션 만료 원칙에 관한 것입니다. 책에는 모두 세션 파일의 수정 시간을 기준으로 한다고 나와 있습니다. 궁금한 점은 다음과 같습니다. 1) 세션 데이터를 수정하지 않고 정상적으로 웹사이트에 접속할 때 1440초 후에 정확히 종료되나요? 2) 아니면 웹페이지를 새로 고칠 때마다 세션 파일이 filemtime
으로 수정된다는 뜻인가요? 세션의 실행 원리는 무엇입니까?
세 번째 문제는 PHP의 session_set_save_handler
설정 문제입니다. 세션이 filemtime
을 처리하는 방법을 알아야만 session_set_sa를 잘 작성할 수 있습니다. ve_handler
의 read
메서드. 웹 페이지를 새로 고칠 때마다 filemtime
이 수정되면 read
< code>파일타임.
획득한 코드는 PHP를 통해 읽기 때문에 원칙적으로 얻을 수 없으며, 읽기 프로세스에서 만료 여부를 다시 확인하므로 만료되면 여전히 얻을 수 없습니다.
1) php.ini에 구성된 시간은 정확하고 유효하지 않습니다. 기본값은 1440입니다. 이 설정은 프로그램에서 수정할 수 있지만 여전히 구성 파일을 수정하는 것이 좋습니다. 왜 옳고 그름이 무효하다고 하는가? PHP는 메모리에 상주하지 않기 때문에 특정 예약된 작업이 트리거되는지 확인하기 위해 각 요청을 사용해야 합니다. 두 번째는 각 가비지 수집으로 인한 성능 손실을 줄이기 위한 것입니다. 가비지 수집 확률은 각각 session.gc_probability 및 session.gc_pisor입니다. 예를 들어 1/100이면 최소 100개의 요청에 대해 한 번만 트리거됩니다.
2) 새로 고칠 때마다 파일 시간이 변경됩니다.
Laravel 프레임워크의 세션 구현을 확인했습니다. 다음은 파일 저장 및 데이터베이스 저장 형식입니다.
파일 시간 새로 고침과 유사한 관련 코드가 발견되지 않았습니다.
테스트 후 파일 저장의 경우 session.gc_maxlifetime을 30초로 설정하세요. 30초를 초과해도 세션 데이터가 해제될 수 있습니다. 그리고 다음 새로 고침 경우 filemtime은 실제로 현재 항목으로 변경됩니다.
누구나 이유를 설명하고 맞춤 저장소를 Memcache로 변경할 수 있나요? 아니면 데이터베이스가 파일과 동일한 형식으로 저장되나요?