PHPのSESSION機構の解析

小云云
小云云オリジナル
2017-11-08 15:10:121728ブラウズ

デフォルトのメカニズムでは、ディスク ファイルを使用して PHP セッションを実装します。 php.ini 設定: session.save_handler = files

1, session_start()

A, 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分钟
//概率是 session.gc_probability/session.gc_divisor 结果 1/1000,
//不建议设置过小,因为session的垃圾回收,是需要检查每个文件是否过期的。
session.save_path =//好像不同的系统默认不一样,有一种设置是 “N;/path”
//这是随机分级存储,这个样的话,垃圾回收将不起作用,需要自己写脚本

B. セッションは、現在 $_COOKIE[session_name()] があるかどうかを判断します。session_id を保存する COOKIE キーの値を返します。

この値は、php.ini から見つけることができます。存在しない場合は、session_id が生成され、生成された session_id が COOKIE の値としてクライアントに渡されます。このステップは、次の COOKIE 操作を実行することと同等であり、COOKIE を実行します。

これの前に出力はありません。PHP には別の関数 session_regenerate_id() があり、この関数を使用すると、この前に出力はありません。

session.name = PHPSESSID //默认值PHPSESSID

D. 存在する場合は、session_id =$_COOKIE[session_name];

次に、session.save_path で指定されたフォルダーに移動して、「SESS_」.session_id() という名前のファイルを見つけます。

その内容を読み取ります。ファイルをシリアル化して反映し、$_SESSION

2に値を代入します。たとえば、新しい値$_SESSION['test'] ='blah';を追加すると、この$_SESSIONのみが維持されます。最後に、$_SESSION の値を session_id で指定されたフォルダーに書き込み、関連するリソースを閉じます。この段階で、session_id を変更する操作を実行することができます。たとえば、Drupal の匿名ユーザーは、ログイン時に SESSION を使用する必要があります。新しい session_id

setcookie(session_name(),
session_id(),
session.cookie_lifetime,//默认0
session.cookie_path,//默认’/’当前程序跟目录下都有效
session.cookie_domain,//默认为空
)

以上がPHPのSESSION機構の解析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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