以下は、Xinyi Network Company でプロジェクトを開発する際に得た経験の一部です
Yii フレームワークの使用時に遭遇する 3 つの問題
1. main.php ファイルへのグローバル変数の導入の問題
この問題を解決する: Yii フレームワークでは、通常、main.php がアプリケーション全体の設定ファイルとして使用され、アプリケーションのさまざまなパラメーターを保存し、配列を直接返します。使用中、main.php ファイルは Yii によって事前にロードされるため、一部のグローバル操作もこのファイルに配置されます。グローバル変数を一度追加した場合、およびグローバルを使用する場合は、一部のクラス操作をロードすることに問題はありません。他の場所でグローバル変数を取得しようとすると、どれだけ頑張っても NULL が返されることがわかりました。さまざまな試みの後、インポートされた場所をエントリファイルindex.phpに配置することで、最終的に問題を解決しました。どのような理由? Yii の main.php ファイルの読み込みを再現してみましょう。次のコード
index.php ファイル:
class CApp {
public function __construct($config) {
$config = require($config);
}
}
$path = "main.php";
$app = new CApp($path);
グローバル $global;
var_dump($global);
main.php ファイル:
$global = array(1, 2, 3);
return array();
2つのファイルを同じディレクトリに配置し、index.phpを直接実行すると、CAppのコンストラクタで$globalを直接出力すると、結果が出力されます。どのような理由?範囲の問題!
main.php ファイルで変数を定義するとき、それをグローバル変数として使用したいのに、ローカル スコープで必要になると、ローカル スコープ変数としてのみ存在します。 TIPI では、関数呼び出しにはスコープがあると述べました。このスコープ内の変数は、ネストが終了すると、変数のライフサイクルが終了します。
したがって、main.php 内のグローバル変数をアプリケーション全体のグローバル変数として使用したい場合は、エントリ ファイルのスコープ内に main.php ファイルを必要とする必要があります。
2. サードパーティの拡張機能を導入する場合の class_exists の問題
Yii フレームワーク Yii は、PHP5 のオートロード機構に基づいたクラスの自動ロード機能を提供します。自動ローダーは、YiiBase クラスの静的メソッド autoload() です。 new を使用してオブジェクトを作成したり、プログラム内のクラスの静的メンバーにアクセスしたりすると、PHP はクラス名をクラス ローダーに渡し、クラス ローダーはクラス ファイルのインクルードを完了します。しかし、サードパーティの拡張機能を導入し、そのサードパーティ拡張機能の命名規則が Yii のものと異なる場合、require XXX file failed というエラーが頻繁に表示されます。 Google で「yii Framework class_exists」を検索すると、Yii Framework の役割 Xue Qiang が、ユーザーは class_exists('MyClass', false) のようなメソッドを使用できると回答していることがわかります。
class_exists 関数は、クラスが定義されているかどうかを確認します。class_name が指すクラスが定義されている場合、この関数は TRUE を返し、そうでない場合は FALSE を返します。 PHP カーネルでは、この関数は class_name で指定されたクラスが現在のクラス テーブルに存在するかどうかを検索します。すべてのクラスは検索前に小文字に変換されるため、大文字と小文字は区別されません。 2 番目のパラメータは autoload を使用するかどうかを示します。このとき、class_exists 関数は最初に autoload を実行し、autoload の実行後にクラス テーブルの class_name が指すクラスが存在するかどうかを確認します。したがって、2 番目のパラメータを FALSE に設定することで自動ロードをバイパスできます。
これで問題は解決するかもしれませんが、変更できないサードパーティのコードを使用している場合はどうなるでしょうか?何をするか?サードパーティのオペレーションを呼び出す前に、自分でハッキングして必要なクラスをロードしただけです。
その後、別の解決策が採用されました。Yii:import の 2 番目のパラメータを直接使用して、ディレクトリ全体を強制的にロードするというものです。
3. Yii エラーログ
問題の詳細については説明しません。本番環境の構成を開発環境に移動しただけなので、エラーは表示されなくなりました。ログルールを調整したら問題ありませんでした。
Yii のエラー ログの処理は、PHP の set_error_handler 関数と set_Exception_handler 関数に依存しています。これら 2 つの関数は、CApplication の initSystemHandlers メソッドで処理されます。
この記事は、成都のウェブサイト構築に焦点を当てた信義ネットワークによって公開されています。yii の詳細については、信義ネットワークの今後のリリースにご注意ください。

セッション関連のXSS攻撃からアプリケーションを保護するには、次の測定が必要です。1。セッションCookieを保護するためにHTTPonlyとセキュアフラグを設定します。 2。すべてのユーザー入力のエクスポートコード。 3.コンテンツセキュリティポリシー(CSP)を実装して、スクリプトソースを制限します。これらのポリシーを通じて、セッション関連のXSS攻撃を効果的に保護し、ユーザーデータを確保できます。

PHPセッションのパフォーマンスを最適化する方法は次のとおりです。1。遅延セッション開始、2。データベースを使用してセッションを保存します。これらの戦略は、高い並行性環境でのアプリケーションの効率を大幅に改善できます。

thesession.gc_maxlifettinginttinginphpdethinesthelifsessessiondata、setinseconds.1)it'sconfiguredinphp.iniorviaini_set()。 2)AbalanceSneededToAvoidPerformanceIssues andunexpectedLogouts.3)php'sgarbagecollectionisisprobabilistic、影響を受けたBygc_probabi

PHPでは、session_name()関数を使用してセッション名を構成できます。特定の手順は次のとおりです。1。session_name()関数を使用して、session_name( "my_session")などのセッション名を設定します。 2。セッション名を設定した後、session_start()を呼び出してセッションを開始します。セッション名の構成は、複数のアプリケーション間のセッションデータの競合を回避し、セキュリティを強化することができますが、セッション名の一意性、セキュリティ、長さ、設定タイミングに注意してください。

セッションIDは、機密操作の前、30分ごとにログイン時に定期的に再生する必要があります。 1.セッション固定攻撃を防ぐためにログインするときにセッションIDを再生します。 2。安全性を向上させるために、敏感な操作の前に再生します。 3.定期的な再生は長期的な利用リスクを減らしますが、ユーザーエクスペリエンスの重量を量る必要があります。

PHPのセッションCookieパラメーターの設定は、session_set_cookie_params()関数を通じて達成できます。 1)この関数を使用して、有効期限、パス、ドメイン名、セキュリティフラグなどのパラメーターを設定します。 2)session_start()を呼び出して、パラメーターを有効にします。 3)ユーザーログインステータスなど、ニーズに応じてパラメーターを動的に調整します。 4)セキュリティを改善するために、セキュアとhttponlyフラグを設定することに注意してください。

PHPでセッションを使用する主な目的は、異なるページ間でユーザーのステータスを維持することです。 1)セッションはsession_start()関数を介して開始され、一意のセッションIDを作成し、ユーザーCookieに保存します。 2)セッションデータはサーバーに保存され、ログインステータスやショッピングカートのコンテンツなど、さまざまなリクエスト間でデータを渡すことができます。

サブドメイン間でセッションを共有する方法は?一般的なドメイン名にセッションCookieを設定することにより実装されます。 1.セッションCookieのドメインをサーバー側の.example.comに設定します。 2。メモリ、データベース、分散キャッシュなど、適切なセッションストレージ方法を選択します。 3. Cookieを介してセッションIDを渡すと、サーバーはIDに基づいてセッションデータを取得および更新します。


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

DVWA
Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

MantisBT
Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

SublimeText3 中国語版
中国語版、とても使いやすい

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