ホームページ >バックエンド開発 >PHPチュートリアル >Manual_PHP チュートリアルから PHP セッション メカニズムを理解して分析する

Manual_PHP チュートリアルから PHP セッション メカニズムを理解して分析する

WBOY
WBOYオリジナル
2016-07-21 15:26:21732ブラウズ

session.save_handler = files
1. session_start()

session_start() は、セッションがファイルに保存されるため、PHP 独自のガベージ コレクションを有効にするセッションの始まりです。 SESSION リサイクルにはファイルの削除が必要です。この確率は php.ini の設定によって決まりますが、一部のシステムでは session.gc_probability = 0 になっており、確率は 0 であり、ガベージ コレクションは cron スクリプトによって実装されます。

コードをコピー コードは次のとおりです:

session.gc_probability = 1
session.gc_divisor = 1000
session.gc_maxlifetime = 1440 //デフォルトの有効期限は 24 分です
//確率はセッションです.gc_確率/session.gc_divisor 結果 1/1000、
//セッション ガベージ コレクションでは各ファイルの有効期限が切れているかどうかを確認する必要があるため、小さすぎる設定はお勧めできません。
session.save_path = //システムごとにデフォルトが異なるようです。1 つの設定は「N;/path」です。
//この場合、ガベージ コレクションは機能しないため、独自に記述する必要があります。 script
session は現在 $_COOKIE[session_name()] があるかどうかを判断します; session_name() は session_id を保存する COOKIE キーの値を返します。この値は php.ini session.name = PHPSESSID //デフォルト値 PHPSESSID から取得できます。

存在しない場合は、session_id が生成され、生成された session_id が COOKIE 値としてクライアントに渡されます。これは、次の COOKIE 操作を実行することと同じです。これは、PHP には別の関数 session_regenerate_id() があり、この関数を使用すると、以前は出力がありません。

コードをコピーします コードは次のとおりです:
setcookie(session_name(),
session_id(),
session.cookie_lifetime,//default 0
session.cookie_path,//default'/'under現在のプログラムとディレクトリ すべて有効な
session.cookie_domain、//デフォルトは空です
)

それが存在する場合、 session_id = $_COOKIE[session_name]; 次に、 session.save_path で指定されたフォルダーに移動して、 ' SESS_'。session_id() ドキュメント。ファイルの内容を読み取り、デシリアライズして、$_SESSION に配置します。


2. $_SESSION に値を割り当てます
たとえば、新しい値 $_SESSION['test'] = 'blah'; を追加すると、この $_SESSION はスクリプトの実行が終了したときにのみ保持されます。 use $ session_id で指定されたフォルダーに _SESSION の値が書き込まれ、関連するリソースが閉じられます。

この段階では、古い session_id を破棄して新しい session_id を生成するなど、session_id を変更する操作を実行できます。Drupal 匿名ユーザーのようなカスタム セッション操作やロール変換に使用されます。 SESSION の場合、ログイン後に新しい session_id を使用する必要があります。

コードをコピー コードは次のとおりです:
if (isset($_COOKIE[session_name()])) {
setcookie(session_name(), '', time() - 42000, '/' );/ /古いセッション Cookie の有効期限が切れます
}
session_regenerate_id();//このステップでは新しい session_id が生成されます
//session_id() は新しい値を返します


3. SESSION 書き込み操作

スクリプトの最後で、SESSION 書き込み操作が実行され、$_SESSION の値が既に存在する場合と、新しいファイルに書き込まれます。を作成する必要がある場合があります。

4. SESSION を破棄します
SESSION によって送信された COOKIE は通常、インスタント COOKIE であり、ログアウトするなど、手動で有効期限を強制する必要がある場合に期限切れになります。ブラウザを閉じるには、コード内で SESSION を破棄する必要があります:

setcookie(session_name(), session_id(), time() - 8000000, ..);//ログアウトする前に実行します
usset( $_SESSION);/ /これにより、すべての $_SESSION データが削除されます。更新後、COOKIE が渡されますが、データはありません。
session_destroy();//この関数はより徹底しており、$_SESSIONを削除し、セッションファイルを削除し、session_idを削除します
ブラウザを閉じずに再度更新すると、2と3でCOOKIEが渡されますが、データが見つかりません。

session.save_handler = user
ユーザー定義のセッション処理メカニズム、より直感的 session_set_save_handler('open', 'close', 'read', 'write', 'destroy', 'gc'); open($save_path, $session_name) を実行して、セッション操作ハンドルを開きます。 session.save_handler = files の場合、$save_path は session.save_path になりますが、ユーザーがカスタマイズした場合、これら 2 つのパラメーターはどちらも使用されず、直接 TRUE が返されます。 read($id) を実行してそこからデータを読み取ります。 //このパラメータは session_id() に自動的に渡され、この値を介して操作できます。

スクリプトの実行が終了したら、write($id, $sess_data) を実行します。 //2 つのパラメーター、非常に単純です

ユーザーが session_destroy() を必要とする場合は、最初に destroy を実行し、次にステップ 2 を実行します

実践的な例:



コードをコピーします
コードは次のとおりです: //SESSION の初期化時に
function open($save_path, $session_name) を呼び出します
{
global $sess_save_path = $save_path;戻る(true);
}

//閉じるときに
function close()を呼び出す
{
return(true);

function read($id)
{
global $sess_save_path; /sess_$id" ;
return (string) @file_get_contents($sess_file);
}
//スクリプトの実行が終了する前に、書き込み操作を実行します
function write($id, $sess_data)
{
echo "sdfsf" ;
グローバル $sess_save_path;

$sess_file = "$sess_save_path/sess_$id";
if ($fp = @fopen($sess_file, "w")) {
$return = fwrite($fp, $sess_data) ;
fclose($fp );
return $return;
return(false);

関数 destroy($id)

$sess_file; sess_save_path/sess_$id" ;
return(@unlink($sess_file));
}

function gc($maxlifetime)
{
global $sess_save_path;

foreach (glob("$sess_save_path/sess_*") as $filename) {
if (filemtime($filename) + $maxlifetime < time()) {
@unlink($filename)
}
return true;



http://www.bkjia.com/PHPjc/323987.html

www.bkjia.com

tru​​e

http://www.bkjia.com/PHPjc/323987.html

技術記事

session.save_handler = files 1. session_start() session_start() はセッションメカニズムの始まりであり、セッションは PHP 自身のガベージであるファイルに保存されるため、一定の確率でガベージコレクションを開始します。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。