session_destroy() は、現在のセッションに関連付けられたすべてのデータを破棄します。セッションに関連付けられたグローバル変数の設定は解除されません。また、セッション変数を再度使用するには、session_start() を実行する必要があります。
ユーザーをログアウトするなど、セッションを完全に強制終了するには、セッション ID の設定も解除する必要があります。セッション ID の伝播に Cookie が使用されている場合 (デフォルトの動作)、セッション Cookie も設定解除されます。 setcookie() を削除する必要があります。
ユーザーをログアウトするなど、セッションを完全に強制終了するには、セッション ID の設定も解除する必要があります。セッション ID の伝播に Cookie が使用されている場合 (デフォルトの動作)、セッション Cookie も設定解除されます。 setcookie() を削除する必要があります。
?
Baidu Knows が書きました
session は、session_start() 中に確立されたセッションです。
$_SESSION はグローバル配列であり、他のグローバル配列と何ら変わりません。 PHP はセッションを作成するときに、セッションの内容を保存するグローバル配列を作成します。この配列はたまたま $_SESSION と呼ばれ、私たちが作成する他の配列と何ら変わりません。
session_start() が実行されると、セッションが開かれます。まず、セッションが作成されていない場合は、システムの tmp ディレクトリにセッション ファイルが作成され (デフォルト、カスタマイズ可能)、現在のセッションの実行スクリプトが作成されます。作成されたグローバル配列 $_SESSION、h$_SESSION はこの時点では空の配列です。セッションが存在する場合は、セッション ファイルの内容を読み取り、$_SESSION 配列を作成します。
session_destroy() は、現在のセッションに関連付けられたすべてのデータを破棄します。セッションに関連付けられたグローバル変数の設定は解除されません。また、セッション変数を再度使用するには、セッション Cookie の設定も解除されません。 session_start() を呼び出す必要があります。
セッションのグローバル変数とセッション関連の Cookie は削除されず、セッションが終了するだけです。通常のグローバル変数と同様に、必要ない場合は unset() することができます。セッションを再度開きたい場合は、もう一度 session_start() する必要がありますが、 session_start() を再確立すると、 session_start() は $_SESSION 配列を再初期化します。
$_SESSION はグローバル配列であり、他のグローバル配列と何ら変わりません。 PHP はセッションを作成するときに、セッションの内容を保存するグローバル配列を作成します。この配列はたまたま $_SESSION と呼ばれ、私たちが作成する他の配列と何ら変わりません。
session_start() が実行されると、セッションが開かれます。まず、セッションが作成されていない場合は、システムの tmp ディレクトリにセッション ファイルが作成され (デフォルト、カスタマイズ可能)、現在のセッションの実行スクリプトが作成されます。作成されたグローバル配列 $_SESSION、h$_SESSION はこの時点では空の配列です。セッションが存在する場合は、セッション ファイルの内容を読み取り、$_SESSION 配列を作成します。
session_destroy() は、現在のセッションに関連付けられたすべてのデータを破棄します。セッションに関連付けられたグローバル変数の設定は解除されません。また、セッション変数を再度使用するには、セッション Cookie の設定も解除されません。 session_start() を呼び出す必要があります。
セッションのグローバル変数とセッション関連の Cookie は削除されず、セッションが終了するだけです。通常のグローバル変数と同様に、必要ない場合は unset() することができます。セッションを再度開きたい場合は、もう一度 session_start() する必要がありますが、 session_start() を再確立すると、 session_start() は $_SESSION 配列を再初期化します。
?
<?php session_start(); echo var_dump($_SESSION); session_destroy(); echo var_dump($_SESSION); session_start(); echo var_dump($_SESSION); ?>
?結果は
ですarray(4) { ["username"]=> string(2) "xx" ["user_id"]=> string(1) "7" ["user_level"]=> string(1) "0" ["signed_in"]=> bool(true) } array(4) { ["username"]=> string(2) "xx" ["user_id"]=> string(1) "7" ["user_level"]=> string(1) "0" ["signed_in"]=> bool(true) } array(0) { }
?
http://www.nowmagic.net/php/php_SessionPrinciple.php が書きました
PHP SESSION 原則
セッションはサーバー側でユーザーのセッション データを維持するためのメソッドであり、対応する Cookie はクライアント側でユーザー データを維持するためのものであることがわかっています。 HTTP プロトコルはステートレス プロトコルであり、サーバーが応答すると、ブラウザーとの接続が失われます。Netscape では、クライアントがページ間でデータを交換できるように、最初にブラウザーに Cookie が導入されました。多くのユーザーのデータはどうなるのでしょうか?
まず、サーバーがクライアントを識別できるように、クライアントとサーバーに 1 つずつ接続する必要があります。一意の識別には、Cookie または GET による指定の 2 つの方法を使用することをお勧めします。 PHP のデフォルト設定では、セッションの使用時に「PHPSESSID」という名前の Cookie が作成されます (php.ini の session.name 値を変更することで指定できます)。クライアントが Cookie を無効にしている場合は、セッション ID を渡すように指定することもできます。サーバー経由 (php.ini の session.use_trans_sid などのパラメーターを変更)。
サーバー側の session.save_path ディレクトリを見ると、sess_vv9lpgf0nmkurgvkba1vbvj915 に似たファイルが多数見つかります。これは、実際にはセッション ID「vv9lpgf0nmkurgvkba1vbvj915」に対応するデータです。真実はここにあります。クライアントはセッション ID をサーバーに渡します。サーバーは、読み取り時に、ファイルの内容を逆シリアル化してから、セッション値を取得します。書かれた。
これは事実なので、サーバーがセッションをサポートしていない場合、またはセッションをカスタマイズしたい場合は、DIY で PHP の uniqid を使用して重複しないセッション ID を生成し、セッションのコンテンツを保存する場所。MySQL データベースにセッションを保存する方法についても学習できます。
セッションを使用する前に session_start() を実行する必要があるのはなぜですか?
原理を理解すると、いわゆるセッションは実際にはクライアント上のセッション ID であり、新しいセッションを作成する前に session_start() を実行すると、サーバーに Cookie を植えて準備するように指示されます。セッション ファイル、そうでない場合は、セッションのコンテンツを保存する方法は? セッションを読み取る前に session_start() を実行すると、サーバーはセッション ID に従ってセッション ファイルを迅速にデシリアライズするように指示されます。
session_start() の前に実行できるセッション関数は 1 つだけです。 session_name(): セッション名を読み取るか指定します (たとえば、デフォルトは「PHPSESSID」です)。これは当然 session_start の前に実行する必要があります。
セッションはシステム パフォーマンスに影響します
セッションは、アクセス数が多い Web サイトのシステム パフォーマンスに影響します。同じディレクトリに 10,000 個を超えるファイルがある場合、パフォーマンスに影響を与える理由の 1 つは、ファイル システムの設計です。ファイルサイズの配置には非常に時間がかかります。PHP はセッション ディレクトリ ハッシュをサポートしています。php.ini で session.save_path = "2;/path/to/session/dir" を変更すると、セッションが 2 つのレベルで保存されます。サブディレクトリ、それぞれ ディレクトリには 16 個のサブディレクトリ [0~f] がありますが、PHP セッションはディレクトリの作成をサポートしていないようです。事前にこれらのディレクトリを作成する必要があります。
もう 1 つの問題は、小さなファイルの効率です。一般に、セッション データはそれほど大きくありません (1 ~ 2K)。ディスク上に多数のファイルが存在する場合、IO 効率は確実に低下します。 PHP マニュアルでは Reiserfs ファイル システムの使用を推奨していますが、Reiserfs の作者は妻を殺害し、SuSE も Reiserfs を放棄しました。
実際、セッションを保存するには多くの方法があり、php -i|grep "Registered save handlers" を通じて表示できます。たとえば、Registered save handlers => files user sqlite eaccelerator はファイルを通じて表示できます。 users、sqlite、eaccelerator 保存するには、サーバーに memcached がインストールされている場合、mmcache のオプションもあります。もちろん、MySQL、PostgreSQL など、他にもたくさんあります。どれも良い選択です。
セッションの同期
フロントエンドには多数のサーバーがある可能性があり、ユーザーはサーバー A にログインし、セッション情報を設定し、Web サイトのいくつかのページにアクセスしてサーバー B にジャンプする可能性があります。今回はサーバーBにセッション情報がなく、特別な処理を行っていないため、問題が発生する可能性があります。
セッション同期には色々な種類がありますが、memcachedやMySQLに保存する場合は、同じ場所に指定するだけで簡単です。均一に。
もう 1 つの方法は、暗号化された Cookie を使用することです。ユーザーがサーバー A にログインすると、ユーザーがサーバー B にアクセスしたときに、セッションが存在するかどうかを確認します。もちろん問題はありません。そうでない場合は、Cookie が有効であるかどうかを確認し、有効な場合はサーバー B でセッションを再確立します。この方法は、Web サイトに多数のサブチャネルがあり、サーバーが同じコンピュータ ルームにない場合に、均一にログインしたい場合に非常に便利です。
もちろん、別の方法は、負荷分散層でセッションを維持し、訪問者を特定のサーバーにバインドすることであり、セッションの同期は必要ありません。すべては運用および保守レベルのものです。セッションがシステムのパフォーマンスに影響を与えると誰もが言うからといって、臆病になる必要はありません。問題を攻撃したり隠したりする余裕がない場合は、それが重要です。ここにはふさわしくありません。
PHP SESSION 原則
セッションはサーバー側でユーザーのセッション データを維持するためのメソッドであり、対応する Cookie はクライアント側でユーザー データを維持するためのものであることがわかっています。 HTTP プロトコルはステートレス プロトコルであり、サーバーが応答すると、ブラウザーとの接続が失われます。Netscape では、クライアントがページ間でデータを交換できるように、最初にブラウザーに Cookie が導入されました。多くのユーザーのデータはどうなるのでしょうか?
まず、サーバーがクライアントを識別できるように、クライアントとサーバーに 1 つずつ接続する必要があります。一意の識別には、Cookie または GET による指定の 2 つの方法を使用することをお勧めします。 PHP のデフォルト設定では、セッションの使用時に「PHPSESSID」という名前の Cookie が作成されます (php.ini の session.name 値を変更することで指定できます)。クライアントが Cookie を無効にしている場合は、セッション ID を渡すように指定することもできます。サーバー経由 (php.ini の session.use_trans_sid などのパラメーターを変更)。
サーバー側の session.save_path ディレクトリを見ると、sess_vv9lpgf0nmkurgvkba1vbvj915 に似たファイルが多数見つかります。これは、実際にはセッション ID「vv9lpgf0nmkurgvkba1vbvj915」に対応するデータです。真実はここにあります。クライアントはセッション ID をサーバーに渡します。サーバーは、読み取り時に、ファイルの内容を逆シリアル化してから、セッション値を取得します。書かれた。
これは事実なので、サーバーがセッションをサポートしていない場合、またはセッションをカスタマイズしたい場合は、DIY で PHP の uniqid を使用して重複しないセッション ID を生成し、セッションのコンテンツを保存する場所。MySQL データベースにセッションを保存する方法についても学習できます。
セッションを使用する前に session_start() を実行する必要があるのはなぜですか?
原理を理解すると、いわゆるセッションは実際にはクライアント上のセッション ID であり、新しいセッションを作成する前に session_start() を実行すると、サーバーに Cookie を植えて準備するように指示されます。セッション ファイル、そうでない場合は、セッションのコンテンツを保存する方法は? セッションを読み取る前に session_start() を実行すると、サーバーはセッション ID に従ってセッション ファイルを迅速にデシリアライズするように指示されます。
session_start() の前に実行できるセッション関数は 1 つだけです。 session_name(): セッション名を読み取るか指定します (たとえば、デフォルトは「PHPSESSID」です)。これは当然 session_start の前に実行する必要があります。
セッションはシステム パフォーマンスに影響します
セッションは、アクセス数が多い Web サイトのシステム パフォーマンスに影響します。同じディレクトリに 10,000 個を超えるファイルがある場合、パフォーマンスに影響を与える理由の 1 つは、ファイル システムの設計です。ファイルサイズの配置には非常に時間がかかります。PHP はセッション ディレクトリ ハッシュをサポートしています。php.ini で session.save_path = "2;/path/to/session/dir" を変更すると、セッションが 2 つのレベルで保存されます。サブディレクトリ、それぞれ ディレクトリには 16 個のサブディレクトリ [0~f] がありますが、PHP セッションはディレクトリの作成をサポートしていないようです。事前にこれらのディレクトリを作成する必要があります。
もう 1 つの問題は、小さなファイルの効率です。一般に、セッション データはそれほど大きくありません (1 ~ 2K)。ディスク上に多数のファイルが存在する場合、IO 効率は確実に低下します。 PHP マニュアルでは Reiserfs ファイル システムの使用を推奨していますが、Reiserfs の作者は妻を殺害し、SuSE も Reiserfs を放棄しました。
実際、セッションを保存するには多くの方法があり、php -i|grep "Registered save handlers" を通じて表示できます。たとえば、Registered save handlers => files user sqlite eaccelerator はファイルを通じて表示できます。 users、sqlite、eaccelerator 保存するには、サーバーに memcached がインストールされている場合、mmcache のオプションもあります。もちろん、MySQL、PostgreSQL など、他にもたくさんあります。どれも良い選択です。
セッションの同期
フロントエンドには多数のサーバーがある可能性があり、ユーザーはサーバー A にログインし、セッション情報を設定し、Web サイトのいくつかのページにアクセスしてサーバー B にジャンプする可能性があります。今回はサーバーBにセッション情報がなく、特別な処理を行っていないため、問題が発生する可能性があります。
セッション同期には色々な種類がありますが、memcachedやMySQLに保存する場合は、同じ場所に指定するだけで簡単です。均一に。
もう 1 つの方法は、暗号化された Cookie を使用することです。ユーザーがサーバー A にログインすると、ユーザーがサーバー B にアクセスしたときに、セッションが存在するかどうかを確認します。もちろん問題はありません。そうでない場合は、Cookie が有効であるかどうかを確認し、有効な場合はサーバー B でセッションを再確立します。この方法は、Web サイトに多数のサブチャネルがあり、サーバーが同じコンピュータ ルームにない場合に、均一にログインしたい場合に非常に便利です。
もちろん、別の方法は、負荷分散層でセッションを維持し、訪問者を特定のサーバーにバインドすることであり、セッションの同期は必要ありません。すべては運用および保守レベルのものです。セッションがシステムのパフォーマンスに影響を与えると誰もが言うからといって、臆病になる必要はありません。問題を攻撃したり隠したりする余裕がない場合は、それが重要です。ここにはふさわしくありません。
?删除session和相关的cookie的方法
<?php // Initialize the session. // If you are using session_name("something"), don't forget it now! session_start(); // Unset all of the session variables. $_SESSION = array(); // If it's desired to kill the session, also delete the session cookie. // Note: This will destroy the session, and not just the session data! if (ini_get("session.use_cookies")) { $params = session_get_cookie_params(); setcookie(session_name(), '', time() - 42000, $params["path"], $params["domain"], $params["secure"], $params["httponly"] ); } // Finally, destroy the session. session_destroy(); ?>
?