php 에서 Session 의 생 성 메커니즘,회수 메커니즘 과 저장 메커니즘 에 대한 탐구

1.phop 에서 session 의 생 성 메커니즘
PHP 에서 어떻게 세 션 을 만 들 었 는 지 분석 해 보 겠 습 니 다.session 을 설계 한 목적 은 모든 사용자 의 각종 상 태 를 유지 하여 HTTP 프로 토 콜 의 부족(무상 태)을 보완 하 는 것 이다.세 션 이 서버 에 저장 되 어 있다 는 것 을 알 고 있 습 니 다.모든 사용자 의 상 태 를 유지 하 는 데 사용 되 는 이상 무엇 을 이용 하여 사용 자 를 구별 합 니까?이 럴 때 는 쿠키 를 빌려 야 합 니 다.우리 가 코드 에서 session 을 호출 할 때start();PHP 는 SESSION 의 저장 디 렉 터 리(기본 값/tmp/)와 클 라 이언 트 의 쿠키 디 렉 터 리 에 각각 파일 을 생 성 합 니 다.session 파일 이름 은 다음 과 같 습 니 다:

sess {형식SESSION ID},이 때 session 파일 에는 아무런 내용 이 없습니다.sessionstart();이 두 줄 의 코드 를 추 가 했 습 니 다:

$_SESSION['name'] = 'wanchun0222';

$_SESSION['blog'] = 'coderbolg.net';

이 때 파일 에 내용 이 있 습 니 다.

name|s:11:"wanchun0222";blog|s:13:"coderbolg.net";
이때 쿠키 를 봅 니 다.

서버 가 자동 으로 쿠키 를 생 성 하 는 것 을 볼 수 있 습 니 다.쿠키 이름 은"PHPSESSID"이 고 쿠키 내용 은 문자열 입 니 다.사실 이 문자열 은{SESSIONID}입 니 다.아마도 우리 가 session 을 사용 할 때,PHP 는 유일한 SESSIONID 번호(예 를 들 어 2bd170b3f86523f1b1b1b60b55ffde0f 66)가 되 고,우리 서버 의 기본 디 렉 터 리 아래 에 파일 을 생 성 합 니 다.파일 이름 은 sess {입 니 다.SESSIONID},현재 사용자 의 클 라 이언 트 에 쿠키 를 생 성 합 니 다.내용 은 이미 말 했 습 니 다.이렇게 하면 PHP 는 모든 사용자 에 게 하나의 SESSIONID 를 생 성 합 니 다.즉,한 사용자 에 게 하나의 session 파일 을 생 성 합 니 다.PHP 는 한 사용자 에 게 session 을 처음 사용 할 때 클 라 이언 트 에 쿠키 를 기 록 했 습 니 다.이 사용자 가 나중에 방문 할 때 브 라 우 저 는 이 쿠키 를 가 져 옵 니 다.PHP 는 쿠키 를 받 은 후에 안에 있 는 SESSIONID 를 읽 고 이 SESSIONID 를 들 고 session 디 렉 터 리 에 가서 session 파일 을 찾 습 니 다.찾 으 면$호출SESSION[blog]에 나 와 요.
2.phop 에서 session 의 만 료 회수 메커니즘
우 리 는 session 의 생 성과 작업 원 리 를 알 게 되 었 고 session 디 렉 터 리 에 많은 session 파일 이 있 음 을 발견 했다.물론 이 파일 들 은 영원히 존재 하지 않 을 것 이다.PHP 는 기한 이 지난 회수 체 제 를 제공 할 것 이다.php.ini 에서 session.gcmaxlifetime 은 session 에 생존 시간 을 설정 합 니 다(기본 값 은 1440 s).세 션 파일 의 마지막 업데이트 시간 이 지금까지 생존 시간 을 초과 하면 이 세 션 파일 은 만 료 된 것 으로 여 겨 집 니 다.다음 세 션 에서 회수 할 때 삭 제 됩 니 다.그럼 다음 세 션 회수 가 언제 죠?phop 요청 횟수 와 관련 이 있 습 니 다.PHP 내부 메커니즘 에 서 는 php 가 N 번 요청 되면 한 번 의 트리거 회수 메커니즘 이 있 습 니 다.도대체 몇 번 을 요청 하 는 지 한 번 을 터치 하 는 것 은 다음 과 같은 두 개의 매개 변 수 를 통 해 제어 하 는 것 입 니 다.

session.gc_probability = 1

session.gc_divisor = 100

php.ini 의 기본 설정 입 니 다.100 번 의 PHP 요청 마다 회수 가 발생 한 다 는 뜻 입 니 다.확률 은 gcprobability/gc_divisor 。우 리 는 서버 측의 session 만 료 메커니즘 을 이해 하고 클 라 이언 트 의 쿠키 만 료 메커니즘 을 살 펴 보 았 다.
쿠키 가 효력 을 잃 으 면 브 라 우 저 는 서버 에 쿠키 를 보 내지 못 합 니 다.이 때 는 서버 의 session 파일 이 존재 하 더 라 도 소 용이 없습니다.PHP 는 어떤 session 파일 을 읽 어야 할 지 모 르 기 때 문 입 니 다.우 리 는 PHP 의 쿠키 만 료 시간 이 만 들 때 설정 되 어 있다 는 것 을 알 고 있 습 니 다.그러면 PHP 는 session 을 만 드 는 동시에 클 라 이언 트 에 만 든 쿠키 의 생명 주 기 는 얼마나 됩 니까?이것 은 php.ini 에 설정 되 어 있 습 니 다:session.cookielifetime 。이 값 은 기본적으로 0 입 니 다.브 라 우 저가 SESSIONID 를 닫 으 면 효력 이 없습니다.그럼 저희 가 session.gc 를...maxlifetime 과 session.cookielifetime 을 같은 값 으로 설정 하면 session 의 실효 시간 을 제어 할 수 있 습 니 다.
3.phop 에서 session 의 클 라 이언 트 저장 체제
위의 소 개 를 통 해 알 수 있 듯 이 사용자 가 쿠키 를 닫 으 면 우리 의 session 은 전혀 일 을 할 수 없습니다.네,그렇습니다.php 에서 session 의 클 라 이언 트 저장 메커니즘 은 쿠키 만 있 습 니까?아 닙 니 다.우리 의 SESSIONID 가 쿠키 를 통 해 각 페이지 에 전달 되 지 못 하 는 이상 우 리 는 또 다른 방법 이 있 습 니 다.바로 페이지 GET 를 통 해 값 을 전달 하 는 방식 입 니 다.
PHP 는 쿠키 가 비활성화 되 었 을 때 자동 으로 GET 방식 으로 페이지 를 넘 어 SESSIONID 를 전달 할 수 있 습 니 다.전 제 는 php.ini 의 session.use 를 설정 하 는 것 입 니 다.trans_sid 는 1 이다.이 때 클 라 이언 트 가 쿠키 를 사용 하지 않 을 때 session 을 사 용 했 고 현재 페이지 에서 클릭 을 통 해 다른 페이지 로 연 결 될 때 PHP 는 자동 으로 링크 에 SESSIONID 인 자 를 추가 합 니 다.이렇게:nextpage.php?SESSIONID=2bd170b3f86523f1b1b60b55ffde0f 66.나 는 네가 이런 방식 의 단점 을 보 았 을 것 이 라 고 생각한다.안전 하지 않 은 것 같다.

좋은 웹페이지 즐겨찾기