ホームページ バックエンド開発 PHPチュートリアル PHPのログアウトパフォーマンス

PHPのログアウトパフォーマンス

Jun 13, 2016 pm 12:43 PM
cookie php session start the

PHPログアウト関数

phpマニュアルの書き込み
session_destroy() は、現在のセッションに関連付けられたすべてのデータを破棄します。セッションに関連付けられたグローバル変数の設定は解除されません。また、セッション変数を再度使用するには、session_start() を実行する必要があります。

ユーザーをログアウトするなど、セッションを完全に強制終了するには、セッション 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 配列を再初期化します。

?

1

2

3

4

5

6

7

8

<?php

session_start();

echo var_dump($_SESSION);

session_destroy();

echo var_dump($_SESSION);

session_start();

echo var_dump($_SESSION);

?>

ログイン後にコピー

?結果は

です

1

2

3

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 サイトに多数のサブチャネルがあり、サーバーが同じコンピュータ ルームにない場合に、均一にログインしたい場合に非常に便利です。

もちろん、別の方法は、負荷分散層でセッションを維持し、訪問者を特定のサーバーにバインドすることであり、セッションの同期は必要ありません。すべては運用および保守レベルのものです。セッションがシステムのパフォーマンスに影響を与えると誰もが言うからといって、臆病になる必要はありません。問題を攻撃したり隠したりする余裕がない場合は、それが重要です。ここにはふさわしくありません。

?删除session和相关的cookie的方法

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

<?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();

?>

ログイン後にコピー

?

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットな記事タグ

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Dec 24, 2024 pm 04:42 PM

Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド

CakePHP の日付と時刻 CakePHP の日付と時刻 Sep 10, 2024 pm 05:27 PM

CakePHP の日付と時刻

CakePHP ファイルのアップロード CakePHP ファイルのアップロード Sep 10, 2024 pm 05:27 PM

CakePHP ファイルのアップロード

CakePHP ルーティング CakePHP ルーティング Sep 10, 2024 pm 05:25 PM

CakePHP ルーティング

CakePHP プロジェクトの構成 CakePHP プロジェクトの構成 Sep 10, 2024 pm 05:25 PM

CakePHP プロジェクトの構成

CakePHP について話し合う CakePHP について話し合う Sep 10, 2024 pm 05:28 PM

CakePHP について話し合う

CakePHP クイックガイド CakePHP クイックガイド Sep 10, 2024 pm 05:27 PM

CakePHP クイックガイド

PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 Dec 20, 2024 am 11:31 AM

PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法

See all articles