PHPにおけるSession IDの実現原理の実例分析

2605 ワード

本明細書では、PHPにおけるSessionIDの実現原理を例示する.皆さんの参考にしてください.具体的には以下の通りです.
Sessionの動作メカニズムは,各アクセス者に一意のid(UID)を作成し,このUIDに基づいて変数を格納することである.UIDはクッキーに格納されるか、URLによって伝達される.
PHPSESSIONIDの生産アルゴリズムの原理は以下の通りである.
hash_func=md 5/sha 1#はphp.ini構成
PHPSESSIONID = hash_func(クライアントIP+現在時間(秒)+現在時間(微妙)+PHPに付属の乱数生産器)
以上からfunc(*)におけるデータサンプリング値のコンテンツ解析では,複数のユーザが同一のサーバで生産したPHPSESSIONIDが重複する確率は極めて低く(少なくとも百万部の1つ)、想定されているが,局動的Webサーバが2000/rpsに達することはすでに強い.
また、ハッカーがあるユーザーの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セッション動作原理】
以下、PHPSESSIDの送信についてクッキーで説明する.
1.クライアントはphpのサービス側アドレスを要求する.
2.サービス側はリクエストを受け取り、今回のphpスクリプトにはsession_が含まれています.start().
3.サービス側はPHPSESSIDを生成します.(デフォルトsessionの格納方法はsession.save_handler=filesであり、ファイル形式で格納されます.生成されたsessionファイル名規則はsess_PHPSESSIDであり、sessionファイルはsession.save_pathに存在します.)
4.サービス側応答ヘッダResponse Headers:Set-Cookie:PHPSESSID=37 vjjasgjdv 2 ouk 1 uomhgqkv 50;path=/.クライアントでこのPHPSESSIDを保存するクッキーを生成します.
5.このとき、クライアントのクッキーにはPHPSESSIDが含まれており、その後、クライアントからのリクエスト毎にヘッダRequest Headers:Cookie:PHPSESSID=37 vjjasgjdv 2 ouk 1 uomhgqkv 50が要求される.サービス側は、クライアントからのリクエストを受信するたびに、これに基づいて
PHPSESSIDはサービス側のセッションファイルを見つけ,このセッションファイルの読み書き操作によりセッションのスーパーグローバル変数属性を実現する.
クライアントがクッキーを無効にしている場合、クッキーを使用してPHPSESSIDを渡すことができないため、クライアントが要求するたびに、サービス側はセッションファイルを再構築し、PHPSESSIDでセッションファイルを再利用できないため、セッションは失効します.
この場合sessionを設定することができる.use_trans_SidはPHPSESSIDを伝送し、具体的な実現方式とクッキーの違いはPHPSESSIDをHTTPのGETを伝送することである.毎回要求する住所の中ですべてPHPSESSIDパラメータ"urlを補充しますか?
PHPSESSID=37 vjjasgjdv 2 ouk 1 uomhgqkv 50"で実現します.
【PHPcliモードsession_id()でsessionを使用】
現在のセッションのPHPSESSIDを取得するか、現在のセッションのPHPSESSIDを設定することができます.
PHPcliモードではこれを設定することでsessionを使用する目的を達成でき、非常に便利です.
例:

 
 

PHPに関する詳細について興味のある読者は、「phpキャッシュ技術総括」、「PHP配列(Array)操作技術大全」、「php文字列(string)用法総括」、「PHPエラーと異常処理方法総括」、「phpオブジェクト向けプログラム設計入門チュートリアル」、「php+mysqlデータベース操作入門チュートリアル」および「php一般データベース操作テクニック要約」
ここで述べたことが皆さんのPHPプログラム設計に役立つことを願っています.