PHPにおけるセッションメカニズムの詳細

3683 ワード

セシオンって何?
まず、sessionはブラウザとサーバの間のインタラクティブなセッションであることがわかります.では、会話は何でしょうか.名前の通りブラウザとサーバ間の会話ですが、ブラウザが閉じるとセッションは終了します.
セッションが言わざるを得ないのはHTTPプロトコルとクッキーです.httpプロトコルは無状態のプロトコルであることを知っています.つまり、今回のリクエストは前回のリクエストとは何の関係もありません.ログイン後にトップページにアクセスするなど、リクエストされたページに関連がある場合、トップページでどのようにログイン状態だと判断しますか?
そこでクッキーが現れ、クッキーは少量の情報をユーザー自身のブラウザに格納し、ユーザーがブラウザでサーバにアクセスするとPHPはクッキーの情報を読み取ることができ、どのページでも使用することができる.しかし、cookieには欠陥があり、cookieはクライアントに格納され、格納サイズに制限があり、1つのドメイン名の下に格納数にも制限があり、最も重要なのはユーザーが見え、安全ではありません.ユーザーがcookieを変更したり無効にしたりすることができます.この時、sessionはサーバー側に格納されます.クライアントを要求するたびにクッキーを持ち歩く必要はないので、セッションの役割は、HTTPプロトコル要求の無状態問題を解決し、複数回のHTTP要求に連絡を取ることです.
セッションの実行メカニズム
セッションを使用します.最初のステップはセッションを開くことです.これもセッションの最初の段階です.
session_start()   

この関数の役割はセッションを開き、オープン後にクッキー情報を読み出してセッションがあるかどうかを判断することです.id、存在するならこのsessionでid,なければ32ビットのセッションをランダムに生成するid.このセッションを通してidは一意のユーザーをバインドすることができます.このプロセスでは、$SESSIONという変数を初期化し、sessionファイルの内容を読み取り、コンテンツを逆シーケンス化して$SESSIONという変数に値を付与します.この段階では、sessionファイルが期限切れであると判断し、gcプロセスを呼び出し、期限切れのsessionファイルを削除します.gcはどのようにファイルが期限切れかどうかを判断して、どのように操作して後で話します
session_start(); echo "SID: ".SID.""; echo "session_id(): ".session_id().""; echo "COOKIE: ".$_COOKIE["PHPSESSID"];

  :
SID:PHPSESSID=bjjwfoo45hajsjv89trsgtiertbuiwom
session_id():bjjwfoo45hajsjv89trsgtiertbuiwom
cookie:  Notice:undefined index:PHPSESSID
                cookie   session_id,  cookie     ,          ,                cookie,  session_id。
  :cookie    session_id       

SID:     ,SID          ID   ,   “name=ID”,  cookie     session_id,SID        ,    "name=ID"

第2段階はスクリプト実行期間です.phpは$_のみです.SESSIONという変数は、この段階でsessionファイルの内容に影響を与えないことに注意してください.この段階でsession_destroy()です.それ以外はセッションファイルに影響しません.
第3段階:スクリプト実行が終了すると、セッションファイルが操作されます.つまり、この段階で$SESSION配列のデータをシーケンス化してセッションファイルに格納
セッションの格納方式
デフォルトではサーバの一時ディレクトリに格納、phpでファイル名(sess_+session_id)として格納.iniファイルで構成され、ファイルの内容はシーケンス化されたデータで、以下のようになります.
$_SESSION['name'] = ‘  '
$_SESSION['age'] = 18

session   :
    name|i:  ;age|i:18

次はよく使われるphpです.iniファイルのsessionde関連構成:
session.save_handler = files    #  session     ,     ,    redis   memcache,    

session.save_path = "d:/wamp/tmp"    #  session       

session.use_cookies = 1    #    cookie  session_id

session.name = PHPSESSID    #     session_id    

session.auto_start = 0    #      session

session.cookie_lifetime = 0    #         session_id     ,  session         ,  20    ,     ,session          ,cookie         

session.serialize_handler = php

session.gc_divisor = 1000
session.gc_probability = 1
session.gc_maxlifetime = 1440    #  session       

sessionのごみ回収メカニズム
ユーザーがサーバにアクセスするとセッションファイルが生成され、ブラウザが閉じられ、サーバにアクセスすると新しいセッションファイルが生成されます.これにより、セッションのゴミファイルが多くなり、長時間クリーンアップしないと大量のディスクスペースが消費され、セッションファイルにアクセスする速度も低下します.gcプロセスのごみ回収はPHPのいくつかのクリーンアップセッションの関数を先に提出する必要があります
unset($_SESSION['name'])          
session_unset()        ,     session  ,  session    
session_destroy()      session  
setcookie(session_name(), '', time()-1000, '/')      cookie    

  :    session_destroy()    ,setcookie(session_name(), '', time()-1000, '/')     ,          ,       session_id,  session  

次にgcがゴミファイルを自動的に削除します.
session.gc_divisor = 1000
session.gc_probability = 1
session.gc_maxlifetime = 1440    #  session       
  session        ,session.gc_probability/session.gc_divisor=1/1000,      session_start()   1/1000     gc  ,  1000       ,  session.gc_probalility = 1000,  100%   ,     session_start()    gc