この記事では、Yii でフロントログインとバックログインを処理する新しいメソッドについて説明します。参考のために皆さんと共有してください。詳細は次のとおりです:
現在、フロントとバックのログイン問題を伴うプロジェクトに取り組んでいるため、バックエンドをモジュールとして処理します。多くの人が 2 つのエントリ ファイル、index.php と admin.php を配置し、それぞれフロントエンドとバックエンドを指定しているのを見かけます。この方法はフロントエンドとバックエンドを完全に分離できるので非常に優れていますが、この方法は少し現実離れしているといつも感じます。この方法と 2 つのアプリケーションの違いは何でしょうか。 1 つのフレームワークを使用して 2 つのアプリを作成する方が良いでしょう。また、Yii 公式のバックグラウンド使用方法も Module を使用することです。しかし、Moudle の方法には非常に厄介な問題があり、Cwebuser でログインするとフロントとバックエンドが同時にログイン、ログアウトしてしまい、明らかに無理があります。もちろん、以下で紹介する方法を見つけるまでには長い時間がかかりましたが、他の人の方法をベースにしており、少し変更しました。私の最初のアプローチは、バックグラウンドでログインするときに isadmin セッションをセットアップし、フロント デスクにログインするときにセッションからログアウトすることでした。これでは、フロント デスク ログインかバックグラウンド ログインかしかわかりませんでした。フロントとバックエンドの両方にログインできませんでした。つまり、バックグラウンドでログインした後にログアウトし、フロントデスクにログインした後にログアウトしました。この問題の根本的な原因は、同じ Cwebuser インスタンスを使用しており、フロントエンドとバックエンドのセッションを同時にセットアップできないことです。この問題を解決するには、フロントとバックエンドにログインするために異なる Cwebuser インスタンスを使用する必要があります。以下は私のアプローチです。まず、protected->config->main.php:
のフロントエンド ユーザー (Cwebuser) の構成を確認します。 リーリーGii を使用して admin (バックエンド モジュール名) モジュールを生成すると、module->admin の下に AdminModule.php ファイルが生成されます。このクラスは CWebModule クラスを継承します。このファイルのコードは次のとおりです。このドキュメントに記載されていますので、注意深く読んでいただければ幸いです:
リーリーAdminModule の init() メソッドは、バックエンドに別のログイン インスタンスを設定し、フロントエンドとバックエンドで異なる CWebUser を使用させ、フロントエンド セッションと区別するためにバックエンド セッション プレフィックスを設定します (これらは $_SESSION 配列に保存されます)。印刷してご覧ください)。
このようにフロントエンドとバックエンドのログインが分離されましたが、この時点でログアウトするとフロントエンドとバックエンドが一緒にログアウトしたことになります。そこで、logout() メソッドを見つけたところ、パラメータ $destroySession=true があることがわかりました。logout() だけを実行すると、false パラメータを追加すると、すべてのセッションがログアウトされることがわかりました。セッションはログアウトされます。そのため、セッションをログアウトするために false パラメーターを指定した logout メソッドがどのように設定されるかを見てみましょう。 リーリー
ログアウトするために一致するプレフィックスを使用していることがわかりましたか?この時点で、フロントエンドとバックエンドのログインとログアウトを分離できます。これにより、よりアプリケーションらしくなりますね。ふふ…
説明するのをほとんど忘れていました:
リーリー
理解できない場合は、フロントエンドとバックエンドの CWebUser の構成を詳しく見てください。
添付ファイル 1: WebUser.php コード: リーリー
添付 2: AdminWebUser.php コード リーリー
添付 3: フロントエンド UserIdentity.php コード リーリー
添付 4: バックエンド UserIdentity.php コード リーリー
この記事が、Yii フレームワークに基づいた PHP プログラムの設計に役立つことを願っています。興味がありそうな記事: