Sessionの宣言と使い方
セッション設定はCookieとは異なり、最初にPHPでSession_start()を呼び出す必要があります。 session_start() 関数の構文形式は次のとおりです:
Bool session_start(void) //セッションの作成、セッションの開始、セッションの初期化
注: session_start() 関数の前に出力はありません
初めて Web サイトにアクセスすると、Seesion_start() 関数によって一意のセッション ID が作成され、そのセッション ID が HTTP 応答ヘッダーを通じてクライアント Cookie に自動的に保存されます。同時に、ユーザーのセッション情報を保存するために、サーバー側でセッション ID に基づいた名前のファイルも作成されます。同じユーザーが再度この Web サイトにアクセスすると、Cookie に保存されている Seesion ID が HTTP リクエスト ヘッダーを通じて自動的に引き継がれます。このとき、Session_start() 関数は新しいセッション ID を割り当てませんが、サーバーのハード検索を行います。セッション ID と同じ名前のセッション ファイルをディスクに保存し、このユーザー用に以前に保存されたセッション情報を読み出し、それを現在のスクリプトに適用して、このユーザーを追跡するという目的を達成します。 セッションは、$_SESSION['セッション名']のような配列の形式で使用されます。
セッション変数を登録してSessionを読み込むPHP でセッション変数を使用する場合、起動するだけでなく、登録プロセスも実行する必要があります。 $_SESSION配列にアクセスすることでセッション変数の登録と読み込みが完了します。 $_SESSION 連想配列のキー名には、PHP の通常の変数と同じ命名規則があります。セッション変数を登録するコードは次のとおりです:
//セッションの初期化を開始します |
コードは次のとおりです | |
// Cookie にセッション ID が存在するかどうかを判断します if(isset($_COOKIE[セッション名()])){ // セッション ID を含む Cookie を削除します。4 番目のパラメーターは php.ini に設定されているパスと同じである必要があることに注意してください。 setcookie(session_name(),'',time()-3600,'/'); } ?> |
コードは次のとおりです | |
//ステップ 1: セッションを開いて初期化します |
セッションphpini設定オプション
php.ini ファイルとセッションに関連するいくつかの一般的な構成オプション:
session.auto_start = 0; リクエスト開始時にセッションを初期化します
session.cache_expire = 180; キャッシュ内のセッションドキュメントがn分後に期限切れになるように設定します
session.cookie_lifetime = 0; Cookieの保存時間を秒単位で設定します。0の場合、ブラウザが再起動されるまでを意味します。
session.auto_start=1 なので、セッションを使用するたびに session_start() を呼び出す必要はありません。ただし、このオプションを有効にする場合は、いくつかの制限があります。セッション内でオブジェクトを再作成するには、セッションを開始する前にクラス定義をロードする必要があるため、オブジェクトをセッションに配置することはできません。session.cookie_path = / ; クッキーの有効なパス
session.cookie_domain = ; Cookie の有効なドメイン
session.name = PHPSESSID; Cookieで使用されるセッションの名前
session.save_handler = files; データの保存・取得の制御方法
session.save_path = /tmp ; save_handler がファイルに設定されている場合にコントローラーに渡されるパラメーターです
。
session.use_cookies = 1; Cookieを使用するかどうかセッションの自動ガベージコレクションメカニズム
session_destroy() 関数を通じてページに「終了」ボタンを提供し、クリックするとこのセッションを破棄できます。ただし、ユーザーが終了ボタンをクリックせずに直接ブラウザを閉じたり、インターネット接続を切断した場合は、サーバー上に保存されているセッションファイルは削除されません。ブラウザを閉じて、次回ログインするときに新しいセッション ID を再割り当てする必要がありますが、これは php.ini の設定 seesion.cookie_lifetime=0 によってクライアント Cookie のセッション ID の有効期間が設定されているためです。ブラウザに送信される Cookie の有効期間 (秒単位)。システムがセッションに有効期間を与えると、ブラウザが開かれているかどうかに関係なく、セッション ID は自動的に消去されます。クライアントのセッションIDが消滅しても、サーバー上に保存されていたセッションファイルは削除されていません。したがって、Sessoin IDで参照されていないサーバー側のSessionファイルは「ゴミ」となります。
サーバーが保存するセッションファイルは通常のテキストファイルなので、ファイル変更時間が発生します。 「ガベージ コレクション プログラム」が開始されると、セッション ファイルの変更時刻に基づいて、期限切れのセッション ファイルがすべて削除されます。 php.ini の session.gc_maxlifetime オプションを設定して時間 (単位: 秒) を指定します。たとえば、オプションの値を 1440 (24 分) に設定します。 「ガベージ コレクション プログラム」はすべてのセッション ファイルをチェックし、変更時間が現在のシステム時刻から 1440 秒を超えている場合は削除します。
「セッションガベージコレクションプログラム」の起動メカニズムとは何ですか? 「ガベージコレクションプログラム」は、session_start()関数が呼び出されたときに起動されます。 Web サイトに複数のスクリプトがある場合、セッションを開くには session_start() 関数を使用する必要があり、多くのユーザーが同時にアクセスすることになります。 1 秒間に N 回呼び出され、毎回呼び出されるたびに「セッション ガベージ コレクション プログラム」が開始されることになり、非常に不合理です。 php.ini ファイルの「session.gc_probability および session.gc_divisor」オプションを変更することで、ガベージ コレクション プログラムを開始する確率を設定できます。確率は「session.gc_probability/session.gc_divisor」の公開情報に基づいて計算されます。たとえば、オプション session.gc_probability=1 およびオプション session.gc_divisor=100 の場合、確率は「1/100」になります。 、session_start() 関数が 100 回呼び出されると、「ガベージ コレクション プロセス」を開始できます。
php.iniの関連設定
session.cookie_lifetime=0; ブラウザを閉じると、対応するCookieファイルが削除されます
session.gc_maxlifetime; セッションの有効期限を設定します、デフォルトは1440秒(24分)です
session.gc_probability/session.gc_divisor; ガベージコレクション機構を開始する確率(推奨値は1/1000~5000)
Cookieが無効になっている場合は、URLを通じてセッションIDを渡します
Session を使用してユーザーを追跡するには、各ページ間で一意のセッション ID を渡し、そのセッション ID を通じてユーザーがサーバーに保存したセッション変数を抽出します。一般的なセッション ID の送信方法は 2 つあります。
最初の方法は、Cookie に基づいてセッション ID を渡すことです。この方法はより最適ですが、ユーザーはクライアントで Cookie をブロックできるため、常に利用できるわけではありません。
2 番目の方法は、url パラメーターを介して渡し、セッション ID を URL に直接埋め込むことです。
Sessionの実装では通常Cookieが使用されます。クライアントが保存するSession IDはCookieです。お客様が Cookie を無効にすると、セッション ID を Cookie に保存できず、ページ間で受け渡すこともできなくなります。ただし、PHP5 は Linux プラットフォーム上の Cookie ステータスを自動的にチェックできます。クライアントがそれを無効にすると、システムは自動的にセッション ID を URL に追加して送信します。ただし、Windows システムを Web サーバーとして使用する場合、この機能はありません。
セッションを追跡するための別のメカニズムが PHP で提案されています。クライアントのブラウザが Cookie をサポートしていない場合、PHP はクライアントによって要求された URL を書き換えて、URL 情報にセッション ID を追加できます。各ハイパーリンクの URL にセッション ID を手動で追加することもできますが、作業負荷が比較的大きいため、この方法はお勧めできません。以下に示すように:
コードは次のとおりです | |
//オープンセッション
session_start(); |
URL を通じてセッション ID を渡します
スクリプトtest2.phpでは、test1.phpスクリプトでSession変数に保存した別のユーザー名を出力します。セッション ID がこのページに再度出力され、比較により 2 つのスクリプトが同じセッション ID を使用しているかどうかが判断されます。また、Cookieをオンまたはオフにする場合は、ブラウザのアドレスバーのURLの変化にご注意ください。コードは次のようになります:
コードは次のとおりです | |
session_start(); |