PHP を使用して Web ページを手動で期限切れにする detrox [翻訳]
キーワード Web ページの有効期限、登録 Web ページの作成
出典 http://www.phpbuilder.net/columns/clark20030702.php3
Web ページを手動で期限切れにする
Web を手動で期限切れにするページ
著者: Joe Clark
翻訳: detrox
登録プロセス中に一連のページを通過した後、最後の送信後にユーザーが戻れないようにするにはどうすればよいでしょうか。また、カスタム メッセージを表示することもできます。 ?
登録プロセスの一連のページを完了した後、最終送信後にユーザーが前のページに戻れないようにしたいと考えています。これらのページを手動で期限切れにし、可能であればカスタマイズされたメッセージを表示するにはどうすればよいですか。
このシナリオでは、セッションを継続する必要があるため、セッションが期限切れになることは望ましくありませんでした。代わりに、セッションが生存しているかどうかを追跡するために追加のセッション変数を使用しました。 (1) エントリ。スクリプト、(2) キャッシュ制御ディレクティブ、(3) 条件チェック、および (4) セッションの一部を手動で期限切れにするこのレベルでは、セッションが機能し続けるために必要なため、セッションが期限切れになることは望ましくありません。追加のセッション変数を使用して、セッションがアクティブかどうかを追跡します。 3 つの主なコンポーネントがあります: (1) エントリ スクリプト (2) キャッシュ制御インジケーター (3) 状態検出、および (4) セッションの一部の手動有効期限。
エントリー スクリプト
エントリー スクリプト
エントリー スクリプトを使用してセッションを開始すると、(1) すでに進行中のセッションが破棄され、(2) 新しいセッションが開始されます。
セッションを開始するためにエントリ スクリプトを使用します。(1) プロセス内に既に存在するセッションを破棄し、(2) 新しいセッションを開始します。
entry.php:
php session_unset(); session_register('alive'); $_SESSION["alive"] = "1"; .php");?>上記のスクリプトでは、セッションを開始し、session_unset() で登録されているセッション変数を削除し、session_destroy() でそのセッションを破棄します。次に、新しいセッションを開始して、セッション変数。この特定の変数は、セッションのこの部分が生きているかどうかを追跡し、変数を何らかの値に設定してから、登録シリーズの最初のページにリダイレクトします。
上記のスクリプトでは、セッションを開始し、session_unset() を使用して登録されているすべてのセッション変数をクリアし、session_destory() を使用して前のセッションを破棄します。次に、新しいセッションを開始し、セッション変数を登録します。この特定の変数は、セッションのこの部分がアクティブかどうかを追跡します。変数にいくつかの値を設定し、一連の登録ページの最初のページにリダイレクトします。
キャッシュ制御と条件検出
次のコード スニペットでは、セッションがまだ使用中かどうかを自動検出します。次の短いコード スニペットでは、セッションが使用中かどうかを自動検出します。まだ使用中です。
createaccount.php:
php session_start(); header("Cache-control: must-revalidate"); if ($_SESSION["alive"] != "1") { // ユーザーはセッション後に戻ろうとしていますwas destroy //ユーザーはセッションが破棄される前に戻ろうとしました Header("Location:/php/error100.php");
上記の「Cache-control」ディレクティブの使用は非常に重要です。 " ブラウザーは、ページをキャッシュからロードするのではなく、サーバーから再度フェッチする必要があることを指示します。ブラウザーはサーバーからページを再ロードするため、$_SESSION["alive"] 変数を再チェックして、ページがキャッシュからロードされているかどうかを確認します。値が「1」である場合、ページは適切にロードできます。そうでない場合は、このスクリプトを登録シリーズのすべてのページの先頭に配置すると、ユーザーが別のページにリダイレクトされます。ユーザーが「戻る」ボタンを押すたびに、ユーザーが「戻る」ボタンを複数回押す可能性があるため、このスニペットを createaccount.php の createaccount1 に配置するだけでは十分ではありません。 php、createaccount2.php、createaccount3.php.上記のキャッシュ制御インジケーターは非常に重要です。 「must-revalidate」を使用して、ブラウザのキャッシュからページを読み取るのではなく、サーバーからページを読み取る必要があることをブラウザに伝えます。サーバーから再読み取られた Web ページは、$_SESSION["alive"] 変数を再チェックして、その値が 1 であるかどうかを確認するためです。 「はい」の場合、Web ページは通常どおり読み取られますが、そうでない場合は、カスタマイズされたエラー メッセージを含む Web ページにユーザーをリダイレクトします。このスクリプトを登録シリーズ ページの各ページの先頭に配置して、すべてのユーザーが「戻る」ボタンをクリックしたことをキャプチャします。ユーザーが「戻る」ボタンを複数回クリックする可能性があるため、このスクリプトを一連の登録ページの最後のページに配置するだけでは十分ではありません。この内容をcreateaccount.php、createaccount1.php、createaccount2.php、createaccount3.phpに書きました。
セッションを手動で期限切れにするセッションを手動で期限切れにする
最後に行うことは、セッション、または少なくともその一部を手動で「期限切れ」にすることです。私の場合、セッションを存続させたかったので、session_unset は使用できませんでした。 () または session_destroy() ただし、ユーザーが前のページに戻って変更する必要はありませんでした。最後の送信後は、変数を取得するだけであることを覚えていますか?これを取り除くには 2 つの方法があります:
createaccount4.php (最終送信後のページ):
どちらの方法でも実行できます。 「戻る」ボタンを押しても、ユーザーは前のページに戻ってデータを変更して再送信することはできなくなり、代わりに error100.php (または選択した任意のページ) にリダイレクトされます。カスタム エラー メッセージを取得します。
そのため、次回ユーザーが以前に入力したデータを変更するために戻るのを阻止したい場合、およびそれを手動で制御したい場合は、エントリ スクリプトがセッション変数を「alive」状態に設定することを覚えておいてください。 、および終了スクリプト (プロセス中の最後の送信の直後) は、セッション変数を「not live」状態に設定し、「Cache-control:must-revalidate」によりブラウザーにサーバーからページを再読み込みさせます。セッション変数が「生存」していない場合、「生存」チェックが実行されます。
そのため、次回、ユーザーが以前に入力したデータを変更するために前のページに戻るのを防ぎ、それを手動で制御したい場合は、この方法を使用してください。エントリ スクリプトを使用してセッション変数を「アライブ」状態に設定し、終了スクリプト (プロセスの最後のコミット アクションの後) を使用してセッション変数を「非アライブ」状態に設定することを忘れないでください。 「キャッシュ制御: 必須再検証」は、ブラウザーにサーバーから Web ページを再度読み取り、「生存」検出を実装することを強制します。セッション変数が「生きていない」場合は、カスタム ページにリダイレクトします。