ホームページ >バックエンド開発 >PHPチュートリアル >PRG パターンとフラッシュによるセッション処理

PRG パターンとフラッシュによるセッション処理

WBOY
WBOYオリジナル
2024-07-18 21:46:21444ブラウズ

Session Handling with the PRG pattern and Flashing

以前のプロジェクトでは、検証が失敗したときに POST リクエストから直接ビューを返すのは最良のアプローチではありませんでした。

問題

ユーザーが無効なデータを含むログイン フォームを送信すると、フォームにエラー メッセージが表示され、ユーザーはログイン ページにリダイレクトされます。ただし、ユーザーがページを更新するか、別の場所に移動してログイン ページに戻ると、同じエラー メッセージが表示され続けます。

解決策

この問題を解決するには、セッションを使用してエラーを保存し、PRG パターンを実装します。 $_SESSION スーパーグローバル変数にエラーを保存し、create.php のエラー ステートメントを次のように更新できます。

$_SESSION['errors'] = $form->errors();
view('session/create.view.php', [ 'errors' => $_SESSION['errors'] ?? [] ]);

しかし、この変更があっても、問題は依然として残ります。これを解決するには、return ステートメントを次のように変更する必要があります:

return redirect ('/login');



エラーが発生した場合はユーザーをログイン ページに移動しますが、ユーザーにはエラーは表示されません w
次に、$_SESSION スーパーグローバル変数をフラッシュして、短時間後にセッションを破棄します。

$_SESSION['_flashed']['errors'] = $form->errors();

これで問題は解決したことがわかりますが、このコードをリファクタリングするにはクラスに PRG メソッドを追加する必要があります

セッションクラス(PRGパターン)

リファクタリングのために、ユーザーセッションを管理する Session クラスを含む Core/Session.php という名前の新しいファイルを作成します。

<?php 
namespace Core;
class Session {
    public static function has($key) {
        return (bool) static::get($key);
    }
    public static function put($key, $value) {
        $_SESSION[$key] = $value;
    }
    public static function get($key, $default = null) {
        return $_SESSION['_flash'][$key] ?? $_SESSION[$key] ?? $default;
    }
    public static function flash($key, $value) {
        $_SESSION['_flash'][$key] = $value;
    }
    public static function unflash() {
        unset($_SESSION['_flash']);
    }
    public static function flush() {
        $_SESSION = [];
    }
    public static function destroy() {
        static::flush();
        session_destroy();
        $params = session_get_cookie_params();
        setcookie('PHPSESSID', '', time() - 3600, $params['path'], $params['domain'], $params['secure'], $params['httponly']);
    }
}
  1. フラッシュ メソッドは、セッションのフラッシュに使用される $_SESSION['_flash'] 配列にデータを保存します。
  2. get メソッドは、$_SESSION['_flash'] にフラッシュされたデータがあるかどうかを確認し、それを返します。そうでない場合は、通常のセッション データまたはデフォルト値を返します。
  3. unflash メソッドはフラッシュされたデータの設定を解除し、次のリクエストでのみ使用できるようにします。
  4. PRG パターンは、put メソッドを使用してセッションにデータを保存し、リダイレクト (return redirect('/login'); などを使用) し、次に get メソッドを使用して次のリクエストでデータを取得することによって実装されます。

この Session クラスを使用すると、PRG パターンとセッション フラッシュを実装してユーザー セッションを管理し、フォームの重複送信や不要なエラー メッセージの永続化を防ぐことができます。

メソッドあり

このファイルでは、 has メソッドはセッションにキーが存在するかどうかを示すブール値を返します。

. 

public static function has($key) {
    return (bool) static::get($key);
}

ログアウト関数のリファクタリング

function.php ファイルで、Session クラスを使用するようにログアウト関数をリファクタリングします。

Session::destroy();

get メソッドのリファクタリング

プロジェクトはすでに順調に進んでいます。ただし、Core/Session.php の get メソッドをリファクタリングして、コードを 1 つのステートメントに統合する必要があります。

public static function get($key, $default = null) {
    return $_SESSION['_flash'][$key] ?? $_SESSION[$key] ?? $default;
}

今日のプロジェクトでは、見た目を良くし、理解しやすくし、コードのパフォーマンスを向上させるために、多くのリファクタリングが行われています。

しっかりと理解していただけたと思います!

以上がPRG パターンとフラッシュによるセッション処理の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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