PHP에서 세션의 수명주기를 처리하는 것은 일반적인 작업입니다. 특히 여러 페이지간에 사용자 상태를 저장하거나 데이터를 공유 해야하는 경우. PHP는 세션을 파괴하는 두 가지 방법을 제공합니다 : sessionhandler :: destroy () 및 session_destroy () . 그들의 이름은 비슷하지만 사용에는 몇 가지 주요 차이점이 있습니다. 이 기사에서는 두 가지의 차이점을 자세히 설명하고 세션을 파괴하는 가장 적절한 방법을 선택하는 데 도움이됩니다.
session_destroy () 는 PHP의 내장 기능으로 현재 세션을 파괴합니다. 이 기능은 현재 세션과 관련된 모든 데이터를 지우고 세션의 $ _session 배열을 삭제합니다. Session_DESTROY () 는 세션을 파괴 된 것으로 표시하면 세션의 모든 데이터를 즉시 삭제하지 않으며 다음 페이지로드 될 때까지 실제로 데이터를 지우지 않습니다.
session_destroy () 서버에서 세션 데이터를 보유하는 파일 또는 데이터베이스의 레코드를 삭제합니다.
$ _session 배열에서 데이터를 삭제하지 않습니다. 실제로, 세션이 파괴 된 후에도 $ _session 배열은 여전히 존재하지만 더 이상 유효한 데이터를 저장하지 않습니다.
세션을 초기화하려면 session_start ()를 호출해야합니다. 그렇지 않으면 Session_Destroy ()는 정상적으로 호출 할 수 없습니다.
<span><span><span class="hljs-title function_ invoke__">session_start</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-variable">$_SESSION</span></span><span>[</span><span><span class="hljs-string">'user'</span></span><span>] = </span><span><span class="hljs-string">'John Doe'</span></span><span>;
</span><span><span class="hljs-comment">// 세션을 파괴하십시오</span></span><span>
</span><span><span class="hljs-title function_ invoke__">session_destroy</span></span><span>();
</span></span>
SessionHandler :: Destroy ()는 사용자 정의 세션 프로세서에 사용되는 메소드입니다. 세션이 저장되는 방법 (예 : PHP의 기본 파일 스토리지가 아닌 데이터베이스에서)을 제어 해야하는 경우 사용자 정의 세션 핸들러 클래스를 구현할 수 있습니다. 이 경우 SessionHandler :: Destroy ()는 세션 데이터를 파괴하고 해당 청소 작업을 트리거합니다.
SessionHandler 는 Session_SET_SAVE_HANDLER () 함수의 일부이며 개발자가 세션 저장 방법을 사용자 정의 할 수 있습니다. 세션 핸들러 인터페이스에서 Destrove () 메소드를 구현함으로써 개발자는 세션 파괴에 대한 특정 작업을 정의 할 수 있습니다.
SessionHandler :: Destroy ()는 사용자 정의 스토리지 시스템에서 세션 데이터가 지워지도록 사용자 정의 파괴 작업을 호출합니다.
사용자 정의 세션 프로세서를 설정하려면 Session_SET_SAVE_HANDLER ()를 사용해야합니다.
그 목적은 일반적으로 데이터베이스 또는 기타 스토리지 매체에서 세션 ID와 관련된 모든 데이터를 파괴하는 것입니다.
<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">destroy</span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$session_id</span></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-variable">$db</span></span><span> = </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title function_ invoke__">mysqli</span></span><span>(</span><span><span class="hljs-string">"localhost"</span></span><span>, </span><span><span class="hljs-string">"user"</span></span><span>, </span><span><span class="hljs-string">"password"</span></span><span>, </span><span><span class="hljs-string">"database"</span></span><span>);
</span><span><span class="hljs-variable">$db</span></span><span>-></span><span><span class="hljs-title function_ invoke__">query</span></span><span>(</span><span><span class="hljs-string">"DELETE FROM sessions WHERE session_id = '<span class="hljs-subst">$session_id</span></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__">destroy</span></span><span>(</span><span><span class="hljs-variable">$session_id</span></span><span>);
}
}
</span><span><span class="hljs-comment">// 사용자 정의 세션 프로세서 설정</span></span><span>
</span><span><span class="hljs-title function_ invoke__">session_set_save_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-literal">true</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">session_start</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-variable">$_SESSION</span></span><span>[</span><span><span class="hljs-string">'user'</span></span><span>] = </span><span><span class="hljs-string">'Jane Doe'</span></span><span>;
</span><span><span class="hljs-comment">// 세션을 파괴하십시오</span></span><span>
</span><span><span class="hljs-title function_ invoke__">session_destroy</span></span><span>();
</span></span>
시나리오 사용 :
Session_DESTROY () 는 PHP에 내장 된 기능이며, 특히 사용자 정의 세션 스토리지를 사용하지 않을 때 정상 세션 파괴에 적합합니다.
SessionHandler :: Destroy () 는 사용자 정의 세션 스토리지가 사용되는 시나리오에 적합하며 개발자는 사용자 정의 세션 처리 로직을 구현하여 세션을 파괴 할 수 있습니다.
운영 범위 :
session_destroy ()는 세션 데이터 만 파괴하지만 $ _session 배열에서 데이터를 삭제하지는 않습니다. 이는 페이지가 새로 고침 될 때까지 세션의 데이터가 현재 요청에 남아 있음을 의미합니다.
SessionHandler :: Destrove ()는 세션 데이터를 완전히 파괴하며 일반적으로 메소드가 호출되면 데이터가 사용자 정의 스토리지에서 삭제됩니다.
유연성 :
Session_Destroy ()는 대부분의 경우에 비교적 간단한 방법입니다.
SessionHandler :: Destroy ()는 사용자 지정 저장 및 파괴 작업이 필요한 복잡한 응용 시나리오에 적합한 유연성과 확장 성을 제공합니다.
PHP의 기본 세션 스토리지 메커니즘 (예 : 파일 스토리지)을 사용하고 현재 세션을 파괴 해야하는 경우 Session_Destroy ()를 사용하는 것이 가장 쉽고 직접적인 방법입니다.
사용자 정의 세션 스토리지 (예 : 데이터베이스에 저장된)를 사용하고 세션이 파괴되는 방법을 완전히 제어하려는 경우 SessionHandler :: Destroy () 가 더 적절합니다.
전반적으로 Session_destroy () 는 대부분의 기존 응용 프로그램 시나리오에 적합한 반면 SessionHandler :: Destroy () 는 높은 사용자 정의가 필요한 상황에 더 적합합니다. 선택할 방법은 세션 데이터를 저장하는 방법 및 수명주기 관리에 따라 다릅니다.