ホームページ >バックエンド開発 >PHPチュートリアル >php_PHP チュートリアルでのセッションの動作原理と使用法の詳細な説明

php_PHP チュートリアルでのセッションの動作原理と使用法の詳細な説明

WBOY
WBOYオリジナル
2016-07-13 10:50:06857ブラウズ

私の友人の多くは、セッションがどのように機能するのか、セッションとクッキーの違いは何なのかを尋ねます。詳しく知りたい友人は参考のために入力してください。


1.セッションとは

2.セッションは、ユーザーがページにアクセスしてからWebサイトから切断するまでのセッションのライフサイクルを形成します。セッション中、クライアントには、現在のユーザーを識別し、他のユーザーと区別するための一意の SessionID が割り当てられます。
3. セッション中、セッション ID はクライアントとサーバーの 2 つの場所に保存されます。クライアントの場合は、一時 Cookie を使用して保存するか、URL 文字列を介してサーバーに渡されます。指定されたセッション ディレクトリにもテキスト ファイルの形式で保存されます。
4.セッションは ID を通じて各アクセス要求を受け入れ、それによって現在のユーザーを識別し、ユーザー固有の情報とセッション変数 (セッション アクティビティ中に、数値またはテキスト情報をセッションに保存できます) (session_name など) を追跡および維持します。変数 情報はサーバー側に保存されます。
5.SessionID はセッション永続化のためのセッション情報としてデータベースに保存できるため、各ユーザーのログイン時刻、オンライン状態、オンライン時間などを追跡できます。
session.name=PHPSESSID; Cookie で使用されるセッションの名前

•session.save_handler=files; データの保存/取得の制御メソッド
•session.save_path=/tmp; save_handler がファイルに設定されるときにコントローラーに渡されるパラメーター。これはデータ ファイルが保存されるパスです。 •session.use_cookies=1;Cookieを使用するかどうか

phpでセッションを操作する方法:

session_start(); //この関数を使用してセッション関数を開きます

$_SESSION //事前定義されたグローバル変数を使用してデータを操作します

Use unset($_SESSION['key']) //セッションの値を破棄します

操作が簡単で、すべてがサーバーによって実装されるため、処理がバックグラウンドで行われるため、すべてが安全に見えます。しかし、セッションはどのようなメカニズムを使用し、どのように実装され、セッション状態はどのように維持されるのでしょうか?

ちなみに、サーバー、つまり複数のサーバーの LVS を使用したい場合は、通常、memcached セッションを使用します。そうしないと、一部のリクエストがセッションを見つけることができなくなります。

単純な memcache 構成:

コードは次のとおりですコードをコピーsession.save_handler = memcache

もちろん、ファイル ファイル キャッシュを使用する必要がある場合は、nfs を使用してファイルを保存し、保存されたすべてのセッション ファイルを 1 か所に配置できます。

ここで、ユーザーに返されたセッション ID が最終的にメモリに保存され、ユーザーの URL に保存するパラメーターを設定することもできます。

セッションを使用する前に session_start() を実行する必要があるのはなぜですか?

原理を理解した後、いわゆるセッションは実際にはクライアント側のセッションIDとサーバー側のセッションファイルです。新しいセッションを作成する前に session_start() を実行すると、サーバーに Cookie を植えてセッションファイルを準備するように指示されます。それ以外の場合、セッションのコンテンツはどのように保存されますか? ; セッションを読み取る前に session_start() を実行すると、セッション ID に従ってセッション ファイルを迅速にデシリアライズするようにサーバーに指示されます。

session_start() の前に実行できるセッション関数は 1 つだけです session_name(): セッション名を読み取るか指定します (たとえば、デフォルトは「PHPSESSID」です)。これはもちろん session_start の前に実行する必要があります。

セッションはシステムパフォーマンスに影響します

トラフィック量が多い Web サイトでは、セッションがシステムのパフォーマンスに影響します。パフォーマンスに影響を与える理由の 1 つは、同じディレクトリに 10,000 個を超えるファイルがある場合、ファイルの配置に非常に時間がかかります。セッションディレクトリのハッシュ化。php.ini で session.save_path = "2;/path/to/session/dir" を変更すると、セッションは 2 レベルのサブディレクトリに保存され、各ディレクトリには 16 個のサブディレクトリ [0~f] が含まれます。 , しかし、PHPセッションはディレクトリの作成をサポートしていないようです。事前にそれらのディレクトリを作成する必要があります。

もう 1 つの問題は、小さなファイルの効率です。一般的に、セッション データはそれほど大きくありません (1 ~ 2K)。ディスク上に多数のファイルがある場合、PHP の IO 効率は確実に低くなります。マニュアル Reiserfs ファイルシステムの使用が推奨されていますが、Reiserfs の作者は妻を殺害し、SuSE も Reiserfs を放棄しました。

実際、セッションを保存するには多くの方法があり、php -i|grep "登録済み保存ハンドラー" を通じて表示できます。たとえば、登録済み保存ハンドラー => ファイル ユーザー sqlite eaccelerator は、ファイル、ユーザー、sqlite、およびeaccelerator。memcached がインストールされているサーバーの場合は、mmcache のオプションもあります。もちろん、MySQL、PostgreSQL など、他にもたくさんあります。どれも良い選択です。

セッション同期
フロントエンドには多数のサーバーがある可能性があります。ユーザーはサーバー A にログインし、セッション情報を設定し、Web サイトのいくつかのページにアクセスしてサーバー B にジャンプする可能性があります。この時点でサーバー B にセッション情報がない場合は、特別な処理を行っても問題が発生する可能性があります。

セッション同期には色々な種類がありますが、memcachedやMySQLに保存する場合は同じ場所に指定するだけで統一して保存できます。

もう 1 つの方法は、暗号化された Cookie を使用することです。ユーザーはサーバー A に正常にログインし、ユーザーがサーバー B にアクセスしたときに、セッションがあるかどうかを確認します。セッションが有効でない場合は、Cookie が有効かどうかを確認してください。有効な場合は、サーバー B でセッションを再確立します。この方法は、Web サイトに多数のサブチャネルがあり、サーバーが同じコンピューター室になく、セッションが同期できず、統一的にログインしたい場合に非常に便利です

質問例
既存のシステム A と B; システム A は独立して実行できる Web システム、つまり、システム B はモバイルに基づいており、システム A の機能インターフェイスを呼び出す必要があるとします。 A が変更されていない間、つまりログイン検証とセッション ストレージは変更されていないままですが、システム B はフロントエンド ユーザーのリクエストを処理できます。

ここで提供されるソリューションは PHP を使用して実装されています

ユーザーがログインに成功すると、保存されたセッションの session-id がシステム B に返され、システム B は他のインターフェイスを要求するたびに session_id を保持します。

Aシステムは session_start の前に session_id (session_id) を追加します;

これにより、システム B は安全に A を呼び出すことができます

session.save_path = "tcp://10.28.41.84:10001"

http://www.bkjia.com/PHPjc/632657.htmlwww.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/632657.html技術記事私の友人の多くは、Session がどのように機能するのか、Cookie と何が違うのかを尋ねます。Session の動作原理を詳しく知りたい方は...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。