現在の位置: ホーム> 最新記事一覧> sessionhandler :: desration_destroyの違いは何ですか?セッションを破壊するのに適した方はどれですか?

sessionhandler :: desration_destroyの違いは何ですか?セッションを破壊するのに適した方はどれですか?

gitbox 2025-09-09

PHPでは、セッションのライフサイクルを処理することは、特に複数のページ間でユーザーステータスを保存したり、データを共有する必要がある場合に共通の操作です。 PHPは、セッションを破壊する2つの方法を提供します。SessionHandler :: Destroy()session_destroy() 。それらの名前は似ていますが、使用にはいくつかの重要な違いがあります。この記事では、この2つの違いを詳細に説明し、セッションを破壊する最も適切な方法を選択するのに役立ちます。

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()メソッド

SessionHandler :: Destroy()は、カスタムセッションプロセッサで使用されるメソッドです。セッションの保存方法を制御する必要がある場合(PHPのデフォルトファイルストレージではなく、データベースなど)、カスタムセッションハンドラークラスを実装できます。この場合、 SessionHandler :: Destroy()はセッションデータを破壊し、対応するクリーンアップ操作をトリガーします。

sessionhandlerは、session_set_save_handler()関数の一部であり、開発者はセッションの保存方法をカスタマイズできます。 SessionHandlerインターフェイスにDestroy()メソッドを実装することにより、開発者はセッション破壊のために特定の操作を定義できます。

それがどのように機能するか:

  • SessionHandler :: Destroy()は、カスタム破壊操作を呼び出して、カスタムストレージシステムからセッションデータがクリアされるようにします。

  • Cession_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>-&gt;</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>

重要な違い

  1. シナリオを使用してください

    • session_destroy()は、特にカスタムセッションストレージが使用されていない場合は、通常のセッションの破壊に適したPHPの組み込み関数です。

    • SessionHandler :: Destroy()は、カスタムセッションストレージが使用されるシナリオに適しており、カスタムセッション処理ロジックを実装することにより、開発者がセッションを破壊することができます。

  2. 動作範囲

    • session_destroy()はセッションデータのみを破壊しますが、 $ _Sessionアレイのデータを削除しません。これは、ページが更新されるまで、セッションのデータが現在のリクエストに残っていることを意味します。

    • SessionHandler :: Destroy()はセッションデータを完全に破壊し、通常はメソッドが呼び出されると、データはカスタムストレージから削除されます。

  3. 柔軟性

    • session_destroy()は、ほとんどの場合に適用する比較的簡単な方法です。

    • SessionHandler :: Destroy()は、カスタムストレージと破壊操作を必要とする複雑なアプリケーションシナリオに適した、より大きな柔軟性とスケーラビリティを提供します。

セッションを破壊するのに適した方はどれですか?

  • PHPのデフォルトセッションストレージメカニズム(ファイルストレージなど)を使用しており、現在のセッションを破壊するだけの場合のみ、 Session_Destroy()を使用することが最も簡単で最も直接的な方法です。

  • カスタムセッションストレージ(データベースに保存されているなど)を使用していて、セッションの破壊方法を完全に制御したい場合は、 SessionHandler :: Destroy()がより適切です。

全体として、 Session_Destroy()はほとんどの従来のアプリケーションシナリオに適していますが、 SessionHandler :: Destroy()は、高いカスタマイズが必要な状況により適しています。選択する方法は、セッションデータとそのライフサイクル管理の保存方法によって異なります。