セッション動作メカニズム:
訪問者ごとに一意の ID (UID) を作成し、変数はそれに基づいて保存されます。このUIDで。 UID は Cookie に保存されるか、URL を通じて渡されます。
PHPSESSIONID 生成アルゴリズムの原則:
1. hash_func = md5 / sha1 #php.ini で設定可能
2. PHPSESSIONID = hash_func ( customer End IP 現在時刻 (秒) 現在時刻 (マイクロ秒) PHP 独自の乱数生成器)
上記 hash_func(*) のデータサンプリング値の内容解析より、同一サーバー上に複数のユーザーがいる場合重複した PHPSESSIONID が生成される可能性は非常に低いです。
さらに、ハッカーが特定のユーザーの PHPSESSIONID を推測したい場合、シミュレートする前に、「クライアント IP、現在時刻 (秒、マイクロ秒)、乱数」およびその他のデータも知っておく必要があります。 。
php.ini 設定は次のとおりです:
; Select a hash function for use in generating session ids. ; Possible Values ; 0 (MD5 128 bits) ; 1 (SHA-1 160 bits) ; This option may also be set to the name of any hash function supported by ; the hash extension. A list of available hashes is returned by the hash_algos() ; function. ; http://php.net/session.hash-function session.hash_function=0
PHP セッションの動作原理
次の説明では、送信に Cookie を使用します。 PHPSESSID。
1. クライアントは php サーバーのアドレスを要求します。
2. サーバーはリクエストを受け取り、今回は php スクリプトに session_start()
が含まれています。
3. サーバーは PHPSESSID
を生成します。 (デフォルトのセッション保存方法は session.save_handler=files
で、ファイル形式で保存されます。生成されるセッション ファイル名ルールは sess_PHPSESSID
で、セッション ファイルは session に存在します。 .save_path
in.)
4. サーバー応答ヘッダー 応答ヘッダー: Set-Cookie:PHPSESSID=37vjjasgjdv2ouk1uomhgqkv50; path=/
。クライアント上で Cookie を生成して、この PHPSESSID
を保存します。
5. 現時点では、クライアントの Cookie には PHPSESSID
が含まれており、次に各リクエストのクライアントのヘッダー Request Headers
: Cookie:PHPSESSID=37vjjasgjdv2ouk1uomhgqkv50
。サーバーはクライアントからリクエストを受信するたびに、このPHPSESSID
を元にサーバーのセッションファイルを見つけ、このセッションファイルを読み書きすることでセッションのスーパーグローバル変数属性を実現します。
クライアントが Cookie を無効にすると、Cookie を使用して PHPSESSID
を渡すことができないため、クライアントがリクエストするたびにサーバーはセッション ファイルを再確立し、 を渡すことができなくなります。 PHPSESSID
セッション ファイルを再利用するには、セッションが無効になります。
この場合、session.use_trans_sid
を設定して PHPSESSID
を送信できます。特定の実装方法と Cookie の違いは、PHPSESSID## を渡すことです。 # HTTP 経由
GET転送。 PHPSESSID パラメータ「
url?PHPSESSID=37vjjasgjdv2ouk1uomhgqkv50」は、要求された各アドレスに入力されます。
PHPcli モードは session_id() を通じてセッションを使用します
これを使用して現在のセッションの PHPSESSID を取得したり、現在のセッションを設定したりすることもできますPHPSESSID。 これを PHPcli モードで設定すると、セッションを使用する目的を達成することができ、非常に便利です。 例:<?php // session_id('vingbrv8m64asth0nhplu9gmb7'); session_start(); $_SESSION[md5(rand(100,999))] = rand(100,999); var_dump($_SESSION);推奨チュートリアル:
php 中国語ネットワーク学習トピック:php セッション (画像、テキスト、ビデオ、ケースを含む)
以上がPHPにおけるセッションIDの実装原理の分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。