8
?php
function destroy_session_and_data() {
session_start();
$_SESSION = array();
if (session_id() != "" || isset($_COOKIE[session_name()]))
setcookie(session_name(), '', time() - 2592000, '/'); 
session_destroy();
} ?>

上記のコードがセッションを終了するために使用されることは理解していますが、if 条件と setcookie コマンドの必要性を理解できません。

また、session_id() と session_name() が正確に何であるかを説明してください。

明確な説明をいただければ幸いです。ありがとう

4

3 に答える 3

4

PHP は Cookie を使用してセッションを管理します。具体的には、そのセッションの識別キーと値のペアを Cookie 内に設定します。

  • セッションの名前は Cookie の名前です。PHP ベースの Web サイトのデフォルト名は ですPHPSESSIDsession_name()セッション名を返すか、パラメーターが渡された場合はセッション名を更新します。
  • Cookie 内のキーと値のペアは、セッション ID を表します。キーはそれがセッション識別子であることを示し、値はセッション識別子そのものです。session_id()セッション ID を返すか、パラメーターが渡された場合はセッション ID を更新します。

問題のコードは、リクエストで渡されたセッションがあるかどうかをチェックします。最初に でセッションを開始/再アクティブ化しsession_start()、次にセッション名と一致する既存の Cookie をチェックします。コードが見つかった場合、有効期限を過去の日付に設定することにより、ブラウザーに強制的に Cookie を削除させます。

于 2012-12-19T12:38:04.193 に答える
1

マニュアルから:

session_id()現在のセッションのセッション ID を取得または設定するために使用されます。

session_name()現在のセッションの名前を返します。name を指定session_name() すると、セッション名が更新され、古いセッション名が返されます。

id、セッションが格納されるデータベースの主キー (一意) として使用されます (デフォルトでは、ディスク上のファイルのみ) name。 は単なる名前です。name一意である必要があるかどうかはわかりません。したがって、この場合、コードは、session_id (ブラウザの Cookie からデータを取得し、ローカル データベースを検索する) か、指定された session_name を持つ Cookie があるかどうかをチェックしています。その場合、Cookie の有効期限 (クライアント側) を 43.2 分前に設定し、セッション (サーバー側) を破棄します。

于 2012-12-19T12:42:20.347 に答える
0

訪問者がどの「セッション」にいるかを知るために、Cookie が設定されます。その Cookie が利用可能である限り、ユーザーは同じセッションにとどまります。セッションを終了するには、それを削除する必要があります (これは setcookie() の説明です)。

session_id() と session_name() は php manaul にあります

于 2012-12-19T12:37:19.353 に答える