PHPでは、セッションはページ間で受け渡せるサーバーグローバル変数であるため、サーバー側のユーザーメンバーのログイン認証にもよく使用されます。セッションの安全性も非常に高いです。PHPセッションに関する基礎知識を紹介します。
セッションについてどう思いますか?あなたがそれを勉強したかどうかはわかりませんが、今日はダナイの PHP トレーニング教師がこれに関する内容を皆さんと共有したいと考えています。
セッションのライフサイクルはどれくらいですか
1 ブラウザが終了するとライフサイクルも終了しますが、ファイルは /tmp/(sess_???) にまだ存在します
2 セッション ID は、次回ブラウザを再度開いたときに再割り当てされます。 session_id() を使用して以前の ID を戻すと、/tmp に残っている sess_??? が読み取られ、以前の設定がすべて取得されます。
3 PHP.iniでセッションファイルの残り時間を変更できます
session.gc_maxlifetime = 1440; この秒数が経過すると、保存されます
データは「ゴミ」とみなされます
GCプロセスによってクリーンアップされました
デフォルトは 1440 秒、24 分です
セッションを使用する場合はストレージパスの問題に注意してください
php.ini のセッション設定を見てください
[セッション]
session.save_handler = データの保存/取得に使用されるファイル
session.save_path = /tmp 引数が save_handler に渡されます
ファイルの場合、これは
です
データファイルが保存されているパス
などの PHP インストール パスに変更することをお勧めします。
PHPのSESSIONの仕組みを徹底的に理解する 1.session.save_handler = files
1. session_start() はセッションメカニズムの開始です。セッションはファイルに保存されるため、一定の確率でガベージコレクションが開始されます。
PHP 自体のガベージ コレクションが無効である場合、SESSION のリサイクルにはファイルの削除が必要です。この確率は php.ini の設定によって決まります。
ただし、一部のシステムでは session.gc_probability = 0 (確率が 0 であることを意味します) になっており、ガベージ コレクションは cron スクリプトを通じて実装されます。
session.gc_probability = 1
session.gc_divisor = 1000
//確率は session.gc_probability/session.gc_divisor の結果 1/1000、
// セッションのガベージ コレクションでは各ファイルの有効期限が切れているかどうかを確認する必要があるため、小さすぎる設定はお勧めできません。
session.save_path = // システムごとにデフォルト設定が異なるようです。 1 つの設定は "N;/path" です。
//これはランダムな階層ストレージです。この場合、ガベージ コレクションは機能しないため、独自のスクリプトを作成する必要があります
2. セッションは現在 $_COOKIE[session_name()] が存在するかどうかを判断し、 session_name() は session_id を保存する COOKIE キーの値を返します。
この値は php.ini から見つけることができます
session.name = PHPSESSID //デフォルト値 PHPSESSID
3. 存在しない場合は、session_id が生成され、生成された session_id が COOKIE 値としてクライアントに渡されます。
これは、次の COOKIE オペレーションを実行するのと同じです。このステップでは setcookie() オペレーションが実行され、COOKIE がヘッダーで送信されることに注意してください。
PHP には別の関数 session_regenerate_id() があり、この関数を使用すると、これより前に出力がありません。
️ setcookie(session_name(),
session_id()、
session.cookie_lifetime,//デフォルトは0
session.cookie_path,//デフォルトの「/」は現在のプログラムとディレクトリで有効です
session.cookie_domain,//デフォルトは空です
)
次に、session.save_path で指定されたフォルダーに移動して、「SESS_id()」という名前のファイルを見つけます。
ファイルの内容を読み取り、デシリアライズして、$_SESSION に入れます
* 2. $_SESSION
に値を代入
たとえば、新しい値 $_SESSION['test'] = 'blah'; を追加すると、この $_SESSION はスクリプトの実行が終了したときにのみメモリ内に保持されます。
$_SESSION の値を session_id で指定されたフォルダーに書き込み、関連するリソースを閉じるために使用します。この段階で session_id を変更することができます。
たとえば、古い session_id を破棄し、新しい session_id を生成します。その半分はカスタム セッションの操作とロール変換に使用されます。
たとえば、Drupal の匿名ユーザーは、ログインするときに新しい session_id を使用する必要があります。
if (isset($_COOKIE[session_name()])) {
setcookie(session_name(), '', time() - 42000, '/');//古いセッション Cookie の有効期限が切れます
}
session_regenerate_id();//このステップでは新しい session_id が生成されます
3. SESSION の書き込み操作
スクリプトの最後で、SESSION 書き込み操作が実行され、$_SESSION の値が session_id で指定されたファイルに書き込まれます (このファイルは既に存在している可能性があります)。
新しいファイルの作成が必要になる場合があります。
* 4.セッションを破棄します
SESSION によって送信される COOKIE は通常、インスタント COOKIE であり、ブラウザを閉じると期限切れになります。
方法はたくさんあります。
o 1. setcookie(session_name(), session_id(), time() - 8000000, ..);//ログアウトする前に実行します
o 2. usset($_SESSION);//これにより、すべての $_SESSION データが削除されます。更新後、COOKIE が渡されますが、データはありません。
o 3. session_destroy();//この関数はより完全で、$_SESSION を削除し、セッション ファイルを削除し、session_id を削除します
览 ブラウザがオフになっていない場合は、再度更新してください。 2 と 3 で渡された Cookie は存在しますが、データが見つかりません。
2.session.save_handler = ユーザー
ユーザー定義のセッション処理メカニズム、より直感的
* session_set_save_handler('open', 'close', 'read', 'write', 'destroy', 'gc');
1.session_start()、
open($save_path, $session_name) を実行してセッション操作ハンドルを開きます
ただし、ユーザーがカスタマイズした場合、これら 2 つのパラメーターはどちらも使用されず、直接 TRUE が返されます
read($id) を実行してそこからデータを読み取ります。//このパラメータは自動的に session_id() に渡され、この値を通じて操作できます。
* 2.スクリプトの実行が終了します
Execute write($id, $sess_data) //2 つのパラメータ、非常にシンプル
* 3. ユーザーが session_destroy() を必要とする場合
最初に破棄を実行してから、ステップ 2 を実行します。
実際の例:
コードは次のとおりです | コードをコピー |
//SESSION が初期化されるときに呼び出されます // 閉じるときに呼び出されます 関数読み取り($id) $sess_file = "$sess_save_path/sess_$id"; } 関数 destroy($id) $sess_file = "$sess_save_path/sess_$id"; 関数 gc($maxlifetime) foreach (glob("$sess_save_path/sess_*") as $filename) { |
例
PHP セッション PHP セッションにユーザー情報を保存する前に、まずセッションを開始する必要があります。
注: session_start() 関数は タグの前に配置する必要があります。
コードをコピー | |
php session_start() ?> ;
|
コードは次のとおりです | コードをコピー |
session_start();
//セッションデータを取得します ボディ> |
出力:
ページビュー=1