コアポイント
- オブザーバーパターンは、オブジェクトが状態を変更すると、すべての依存オブジェクトが自動的に通知および更新される動作デザインパターンです。
- このモードには、トピック(またはパブリッシャー)とオブザーバー(またはサブスクライバー)が含まれています。被験者は、観察者にステータスの変化を通知し、オブザーバーはそれに応じて行動できます。このモードは、ゆるい結合を促進し、システムをより柔軟にし、変更または拡張しやすくします。 オブザーバークラスは、被験者がその状態の変更を通知するために呼び出す
- 方法を提供します。トピッククラスを定義する主な方法:
update()
、attach()
、detach()
、およびsetState()
は、オブザーバーを管理し、ステータスの変更を通知するために使用されます。notify()
オブザーバーモードは、1つのオブジェクトの変更が他のオブジェクトの変更が必要な状況に適しています。特に変更するオブジェクトの数が不明な場合。関連するオブジェクトをしっかりと結合せずに、関連するオブジェクト間の一貫性を維持するために使用できます。たとえば、ポータルの認証メカニズムをフォーラムソフトウェアにリンクするために使用され、ユーザーが単一のログインで両方にログインできるようにします。
オブザーバーモード
オブザーバーパターン(パブリッシュサブスクライブパターンとも呼ばれます)は、オブジェクト間の1対多くの関係を定義する行動設計パターンであり、オブジェクトが状態を変更すると、すべての従属オブジェクトが自動的に通知され、更新されます。私の場合、このモードを使用して、ポータルの認証メカニズムをフォーラムソフトウェアとリンクしました。ポータルにログインする動作は、ユーザーがフォーラムにログインするように自動的にトリガーされます。自分の状態に興味のある他のオブジェクトと1対多の関係を持つオブジェクトは、トピックまたは出版社と呼ばれます。その依存性オブジェクトは、オブザーバーまたはsubscriberと呼ばれます。被験者の状態が変化するたびに、オブザーバーに通知され、それに応じて行動できます。トピックには、それらのオブザーバーに通知を送信する任意の数の依存的なオブザーバーを持つことができ、そのような通知を受信するためにトピックを購読することができます。
オブザーバーカテゴリオブザーバークラスは、被験者が状態の変更を通知するために呼び出す メソッドを提供します。この例では、特定の方法として メソッドは、観察可能なトピックのインスタンスを受け入れ、トピックに添付します。後で説明します。 テーマカテゴリ
件名クラスは、 、 メソッドは、状態の変更を伝えることができるように、オブザーバーをトピックに購読します。 慎重に追加...一緒に統合します
およびupdate()
メソッドを定義しました。必要に応じて、ここでメソッドを抽象的な方法として定義し、オブザーバーのサブクラスで具体的な実装を提供できます。 update()
<?php
abstract class Observer
{
public function __construct($subject = null) {
if (is_object($subject) && $subject instanceof Subject) {
$subject->attach($this);
}
}
public function update($subject) {
// 查找具有状态名称的观察者方法
if (method_exists($this, $subject->getState())) {
call_user_func_array(array($this, $subject->getState()), array($subject));
}
}
}
__construct()
メソッドは、トピックの現在の状態を取得し、それを使用して、同じ状態名でサブクラス化されたオブザーバーメソッドを呼び出します。したがって、私の特定のケースでは、ポータルの既存の認証クラスを観察可能なトピックとして作成し、具体的なオブザーバーサブクラスを作成して、フォーラムの認証コードに接続する必要があります。私のサブクラスは、トピックの状態を使用してメソッドを実装する必要もあります。 update()
attach()
、detach()
、setState()
の4つの主要な方法を定義する抽象クラスでもあります。便利なため、ここにnotify()
およびgetState()
メソッドも追加しました。 getObservers()
<?php
abstract class Subject
{
protected $observers;
protected $state;
public function __construct() {
$this->observers = array();
$this->state = null;
}
public function attach(Observer $observer) {
$i = array_search($observer, $this->observers);
if ($i === false) {
$this->observers[] = $observer;
}
}
public function detach(Observer $observer) {
if (!empty($this->observers)) {
$i = array_search($observer, $this->observers);
if ($i !== false) {
unset($this->observers[$i]);
}
}
}
public function getState() {
return $this->state;
}
public function setState($state) {
$this->state = $state;
$this->notify();
}
public function notify() {
if (!empty($this->observers)) {
foreach ($this->observers as $observer) {
$observer->update($this);
}
}
}
public function getObservers() {
return $this->observers;
}
}
attach()
メソッドは、トピックのオブザーバーを登録解除して、トピックの状態の変化を観察しなくなるようにします。 detach()
メソッドは、トピックの現在の状態を設定し、setState()
を呼び出して、オブザーバーを更新します。つまり、各オブザーバーに通知を発行します。 notify()
メソッドは、内部リストを繰り返し、各メンバーのnotify()
メソッドを順番に呼び出すことにより、各購読されたオブジェクトを更新します。 update()
およびgetState()
メソッドは、現在のトピックとオブザーバーリストのステータスを返すヘルパー関数にすぎません。 getObservers()
<?php
class Auth extends Subject
{
function login() {
// 执行登录身份验证的现有代码
// ...
// 向任何观察者发出信号,表明用户已登录
$this->setState("login");
}
function logout() {
// 执行用户注销时执行某些操作的现有代码
// 例如销毁会话等...
// 向任何观察者发出信号,表明用户已注销
$this->setState("logout");
}
}
authが観察可能になるようにサブジェクトクラスを拡張し、login()
メソッドでlogout()
への呼び出しを追加しました。オブザーバーをサブクラス化するために、フォーラムのAPIログインおよびログアウト関数を呼び出す責任のあるauth_forumhookクラスを作成しました。 setState()
<?php
class Auth_ForumHook extends Observer
{
function login($subject) {
// 调用论坛的 API 函数以登录用户
// ...
}
function logout($subject) {
// 调用论坛的 API 函数以注销用户
// ...
}
}
その他は、auth_forumhookインスタンスを添付して、オブザーバーに認証の状態の変更を通知します。 <?php
abstract class Observer
{
public function __construct($subject = null) {
if (is_object($subject) && $subject instanceof Subject) {
$subject->attach($this);
}
}
public function update($subject) {
// 查找具有状态名称的观察者方法
if (method_exists($this, $subject->getState())) {
call_user_func_array(array($this, $subject->getState()), array($subject));
}
}
}
これは、抽象的なオブザーバーとサブジェクトクラスを準備する以外に、すべての追加のコーディングニーズです。 AUTHのlogin()
およびlogout()
メソッドによってトリガーされる状態の変更は、auth_forumhookオブザーバーに通知し、フォーラムのユーザーから自動的にログインまたはログアウトします。たとえば、新しいオブザーバーを追加するには、トラッカーにログインして、ユーザーがポータルをログインまたはログアウトしたときに記録するには、特定のオブザーバークラスを提供し、既存の認証オブジェクトのlogin()
およびlogout()
メソッドをさらに変更せずにAUTHトピックに添付します。
概要
別のオブジェクトに依存し、そのオブジェクトの状態が変更されたときに操作を実行する必要がある複数のオブジェクトがある場合、または1つのオブジェクトが誰またはいくつのものであるかを知らずに他のオブジェクトに通知する必要がある場合、オブザーバーパターンは適切で適用可能なデザインパターンです。この記事では、基本的なトピック観察パターンを紹介し、新しい要件を緊密に結合せずに、この動作パターンを使用して既存のクラスの機能を簡単に拡張する方法の具体的な例を提供します。このパターンを使用すると、コードの再利用性を犠牲にすることなく、関連するオブジェクトと従属オブジェクトの間でより高いレベルの一貫性を実現できます。
JPF / ShutterStockの写真(記事の長さのために、後続のFAQSセクションは省略されています。コアコンテンツは再編成され、磨かれています。)以上がオブザーバーパターンを理解するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

絶対セッションのタイムアウトはセッションの作成時に開始され、アイドルセッションタイムアウトはユーザーの操作なしに開始されます。絶対セッションタイムアウトは、金融アプリケーションなど、セッションライフサイクルの厳格な制御が必要なシナリオに適しています。アイドルセッションタイムアウトは、ソーシャルメディアなど、ユーザーが長い間セッションをアクティブに保つことを望んでいるアプリケーションに適しています。

サーバーセッションの障害は、手順に従って解決できます。1。セッションが正しく設定されていることを確認するために、サーバーの構成を確認します。 2.クライアントCookieを確認し、ブラウザがそれをサポートしていることを確認し、正しく送信します。 3. Redisなどのセッションストレージサービスを確認して、それらが正常に動作していることを確認します。 4.アプリケーションコードを確認して、正しいセッションロジックを確認します。これらの手順を通じて、会話の問題を効果的に診断および修復し、ユーザーエクスペリエンスを改善することができます。

session_start()iscrucialinphpformangingusersions.1)itInitiateSanewsessionifnoneExists、2)resumesanexistingsession、および3)SetSessionCookieforcontinuityAcrossRequests、ApplicationslicationSliviseSlikeUserauthicationAnticatent。

HTTPonlyフラグを設定することは、XSS攻撃を効果的に防止し、ユーザーセッション情報を保護することができるため、セッションCookieにとって重要です。具体的には、1)HTTPONLYフラグは、JavaScriptがCookieにアクセスするのを防ぎます。2)Flagは、PHPとFlaskのSetCookiesとMake_Responseを介して設定できます。

phpsessionssolvetheprobrof of maintainsea crossmultiplehttprequestsbyStoringdataontaonsociatingitiTauniquesessionid.1)それらは、通常はヨーロッパの側面、および一般的には、測定されている

phpssionscanStorestrings、numbers、arrays、andobjects.1.strings:textdatalikeusernames.2.numbers:integersorfloatsforcounters.3.arrays:listslikeshoppingcarts.4.objects:complextructuresthataresialized。

tostartaphpsession、outsession_start()atthescript'sbeginning.1)placeitbe foreanyouttosetthesscookie.2)usesionsionsionsionserdatalikelogintatussorshoppingcarts.3)再生セッションインドストップレベントフィックスアタック

セッション再生とは、新しいセッションIDを生成し、セッション固定攻撃の場合にユーザーが機密操作を実行するときに古いIDを無効にすることを指します。実装の手順には次のものが含まれます。1。感度操作を検出、2。新しいセッションIDを生成する、3。古いセッションIDを破壊し、4。ユーザー側のセッション情報を更新します。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

mPDF
mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

SublimeText3 Linux 新バージョン
SublimeText3 Linux 最新バージョン

PhpStorm Mac バージョン
最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

ホットトピック









