PHPにおけるセッションメカニズムの詳細
3683 ワード
セシオンって何?
まず、sessionはブラウザとサーバの間のインタラクティブなセッションであることがわかります.では、会話は何でしょうか.名前の通りブラウザとサーバ間の会話ですが、ブラウザが閉じるとセッションは終了します.
セッションが言わざるを得ないのはHTTPプロトコルとクッキーです.httpプロトコルは無状態のプロトコルであることを知っています.つまり、今回のリクエストは前回のリクエストとは何の関係もありません.ログイン後にトップページにアクセスするなど、リクエストされたページに関連がある場合、トップページでどのようにログイン状態だと判断しますか?
そこでクッキーが現れ、クッキーは少量の情報をユーザー自身のブラウザに格納し、ユーザーがブラウザでサーバにアクセスするとPHPはクッキーの情報を読み取ることができ、どのページでも使用することができる.しかし、cookieには欠陥があり、cookieはクライアントに格納され、格納サイズに制限があり、1つのドメイン名の下に格納数にも制限があり、最も重要なのはユーザーが見え、安全ではありません.ユーザーがcookieを変更したり無効にしたりすることができます.この時、sessionはサーバー側に格納されます.クライアントを要求するたびにクッキーを持ち歩く必要はないので、セッションの役割は、HTTPプロトコル要求の無状態問題を解決し、複数回のHTTP要求に連絡を取ることです.
セッションの実行メカニズム
セッションを使用します.最初のステップはセッションを開くことです.これもセッションの最初の段階です.
この関数の役割はセッションを開き、オープン後にクッキー情報を読み出してセッションがあるかどうかを判断することです.id、存在するならこのsessionでid,なければ32ビットのセッションをランダムに生成するid.このセッションを通してidは一意のユーザーをバインドすることができます.このプロセスでは、$SESSIONという変数を初期化し、sessionファイルの内容を読み取り、コンテンツを逆シーケンス化して$SESSIONという変数に値を付与します.この段階では、sessionファイルが期限切れであると判断し、gcプロセスを呼び出し、期限切れのsessionファイルを削除します.gcはどのようにファイルが期限切れかどうかを判断して、どのように操作して後で話します
第2段階はスクリプト実行期間です.phpは$_のみです.SESSIONという変数は、この段階でsessionファイルの内容に影響を与えないことに注意してください.この段階でsession_destroy()です.それ以外はセッションファイルに影響しません.
第3段階:スクリプト実行が終了すると、セッションファイルが操作されます.つまり、この段階で$SESSION配列のデータをシーケンス化してセッションファイルに格納
セッションの格納方式
デフォルトではサーバの一時ディレクトリに格納、phpでファイル名(sess_+session_id)として格納.iniファイルで構成され、ファイルの内容はシーケンス化されたデータで、以下のようになります.
次はよく使われるphpです.iniファイルのsessionde関連構成:
sessionのごみ回収メカニズム
ユーザーがサーバにアクセスするとセッションファイルが生成され、ブラウザが閉じられ、サーバにアクセスすると新しいセッションファイルが生成されます.これにより、セッションのゴミファイルが多くなり、長時間クリーンアップしないと大量のディスクスペースが消費され、セッションファイルにアクセスする速度も低下します.gcプロセスのごみ回収はPHPのいくつかのクリーンアップセッションの関数を先に提出する必要があります
次にgcがゴミファイルを自動的に削除します.
まず、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