PHP에서 세션을 처리 할 때, 우리는 종종 두 가지 겉보기에 관련된 기능인 SessionHandler :: close () 및 session_write_close () 를 만듭니다. 이름은 비슷하고 함수는 세션의 종료, 목적, 사용시기 및 기본 메커니즘과 관련이 있습니다. 이 기사는 실제 상황에 따라 가장 적합한 방법을 선택하는 데 도움이되는이 두 기능의 깊이있는 차이점을 탐구합니다.
session_write_close () 는 현재 세션의 쓰기 작동을 수동으로 종료하는 전역 기능입니다. 기본적으로 PHP는 스크립트 실행 종료시 세션을 자동으로 닫지 만 일부 특정 시나리오 (예 : 멀티 스레딩 사용 또는 조기 잠금 릴리스가 필요한 경우)에서 명시 적으로 호출해야 할 수도 있습니다.
이 기능의 기능은 다음과 같습니다.
세션 데이터를 작성하고 저장합니다.
세션 파일의 잠금을 해제하여 다른 요청이 사용자 세션에 액세스 할 수 있도록합니다.
일단 호출되면 현재 스크립트는 더 이상 $ _session을 사용하여 새 데이터를 작성할 수 없으며 읽기는 여전히 사용 가능합니다.
SessionHandler :: Close () 는 PHP의 SessionHandler 클래스의 메소드입니다. 개발자가 직접 통화하는 데 사용되지 않지만 세션 수명주기 끝에 PHP 내부 메커니즘에 의해 호출됩니다.
사용자 정의 세션 프로세서 (예 : SessionHandlerInterface 또는 SessionHandler 클래스 상속)를 사용하는 경우 데이터베이스 연결을 닫거나 로그에 쓰기와 같이 세션이 닫힐 때 수행 할 작업을 정의하려면이 메소드를 구현해야합니다.
Session_SET_SAVE_HANDLER () 등록의 일부이며 세션 라이프 사이클의 처리 흐름을 정의하는 데 사용됩니다.
| 특성 | session_write_close () | SessionHandler :: Close () |
|---|---|---|
| 유형 | 글로벌 기능 | 수업 방법 |
| 개발자가 호출하는지 여부 | 예 | 아니요 (PHP에 의해 내부적으로 호출) |
| 주요 기능 | 세션 데이터 및 릴리스 잠금을 저장합니다 | 사용자 정의 세션을 정의합니다 |
| 사용자 정의 세션 프로세서에 적합합니까? | 아니요 | 예 |
| 시나리오를 사용하십시오 | 세션 잠금을 미리 해제하십시오 | 세션 수명주기 관리를 구현하십시오 |
session_write_close ()를 사용하는 시나리오 :
<span><span><span class="hljs-title function_ invoke__">session_start</span></span><span>();
</span><span><span class="hljs-comment">// 일부를 설정하십시오 Session 데이터</span></span><span>
</span><span><span class="hljs-variable">$_SESSION</span></span><span>[</span><span><span class="hljs-string">'user_id'</span></span><span>] = </span><span><span class="hljs-number">123</span></span><span>;
</span><span><span class="hljs-comment">// 잠금 장치를 미리 해제하십시오</span></span><span>
</span><span><span class="hljs-title function_ invoke__">session_write_close</span></span><span>();
</span><span><span class="hljs-comment">// 다른 사람들은 미래에 실행될 수 있습니다. Session 논리,동시 요청 또는 출력 인 경우</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Session closed early."</span></span><span>;
</span></span>Custom SessionHandler :: Close () 사용
<span><span><span class="hljs-class"><span class="hljs-keyword">class</span></span></span><span> </span><span><span class="hljs-title">MySessionHandler</span></span><span> </span><span><span class="hljs-keyword">extends</span></span><span> </span><span><span class="hljs-title">SessionHandler</span></span><span> {
</span><span><span class="hljs-keyword">public</span></span><span> </span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">close</span></span><span>(</span><span><span class="hljs-params"></span></span><span>): </span><span><span class="hljs-title">bool</span></span><span> {
</span><span><span class="hljs-comment">// 맞춤 논리,例如关闭데이터库连接</span></span><span>
</span><span><span class="hljs-comment">// 또는 로그 등에 쓰기 등</span></span><span>
</span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-built_in">parent</span></span><span>::</span><span><span class="hljs-title function_ invoke__">close</span></span><span>();
}
}
</span><span><span class="hljs-variable">$handler</span></span><span> = </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title class_">MySessionHandler</span></span><span>();
</span><span><span class="hljs-title function_ invoke__">session_set_save_handler</span></span><span>(</span><span><span class="hljs-variable">$handler</span></span><span>, </span><span><span class="hljs-literal">true</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">session_start</span></span><span>();
</span><span><span class="hljs-variable">$_SESSION</span></span><span>[</span><span><span class="hljs-string">'foo'</span></span><span>] = </span><span><span class="hljs-string">'bar'</span></span><span>;
</span></span>이 예에서는 세션 라이프 사이클이 끝날 때 PHP에 의해 Close ()가 자동으로 호출됩니다.
응용 프로그램 시나리오에 따라 다릅니다.
기본 세션 메커니즘을 사용하고 있고 다른 요청이 계속 실행되도록 Session_Write_Close ()를 사용해야합니다.
사용자 정의 세션 스토리지 메커니즘 (예 : Redis, 데이터베이스 또는 암호화 된 스토리지 등)을 구현하고 세션 수명주기의 각 단계의 동작을 제어 해야하는 경우 SessionHandler :: Close ()를 구현해야합니다.
한 문장을 요약하려면 :
session_write_close ()는 동작을 제어하는 데 적합합니다. SessionHandler :: Close ()는 동작을 정의하는 데 적합합니다.
두 기능 모두 세션의 "닫기"와 관련이 있지만, 그들의 책임과 사용량은 매우 다릅니다. 그들 사이의 차이를 이해하면보다 안정적이고 성능있는 PHP 응용 프로그램을 작성하는 데 도움이됩니다. 매일 개발에서 Session_write_Close () 의 합리적인 사용은 세션 잠금으로 인한 성능 병목 현상을 효과적으로 피할 수 있습니다. Mastering SessionHandler :: Close ()는 고급 세션 관리 메커니즘을 구축하기위한 기초입니다.