PHP の Yii フレームワークの cookie およびセッション関数の関連操作を分析する、yiicookie_PHP チュートリアル
PHP の Yii フレームワーク、yiicookie
Sessions
の Cookie とセッション関数の関連操作を分析します。リクエストやレスポンスと同様に、セッションにはデフォルトで yiiwebSession インスタンスのセッション アプリケーション コンポーネントを通じてアクセスできます。
セッションの開閉
次のコードを使用してセッションを開いたり閉じたりできます。
リーリーyiiwebSession::open() メソッドと yiiwebSession::close() メソッドを複数回呼び出しても、メソッドはセッションが開いているかどうかを最初にチェックするため、エラーは発生しません。
セッションデータにアクセスする
セッションに保存されたデータにアクセスするには、次の手順を実行できます:
リーリー補足: session コンポーネントを使用してセッションデータにアクセスする場合、セッションが開かれていない場合は、最初に session_start() を実行する必要がある $_SESSION とは異なります。
セッション データが配列の場合、セッション コンポーネントにより、データ内のユニット項目を直接変更することが制限されます。例:
この問題を解決するには、次のいずれかの回避策を使用してください:
リーリーパフォーマンスと可読性を向上させるために、最後の解決策をお勧めします。これは、セッション変数を配列として保存するのではなく、各配列項目を同じキー プレフィックスを持つセッション変数に変換することです。
カスタマイズされたセッションストレージ
yiiwebSession クラスは、デフォルトでセッション データをサーバー上にファイルとして保存します。Yii は、さまざまなセッション ストレージ メソッドを実装するために次のセッション クラスを提供します。
- yiiwebDbSession: セッションデータをデータテーブルに保存します
- yiiwebCacheSession: セッション データをキャッシュに保存します。キャッシュは構成内のキャッシュ コンポーネントに関連付けられます。
- yiiredisSession: セッションデータを記憶媒体としてredisに保存します
- yiimongodbSession: セッション データを MongoDB に保存します。
- これらすべてのセッション クラスは、同じ API メソッドのセットをサポートしているため、別のセッション ストレージ メディアに切り替えるときに、そのセッションを使用するプロジェクトのコードを変更する必要はありません。
注: $_SESSION を通じてカスタム ストレージ メディアを使用してセッションにアクセスする場合は、yiiwebSession::open() を使用してセッションが開かれていることを確認する必要があります。これは、カスタム セッション ストレージ プロセッサがこのメソッドに登録されているためです。
これらのコンポーネント クラスの設定方法と使用方法については、API ドキュメントを参照してください。以下は、データ テーブルをセッション ストレージ メディアとして使用するようにアプリケーション設定で yiiwebDbSession を設定する方法を示す例です。
リーリー
セッション データを保存するには、次のデータベース テーブルを作成する必要もあります:
「BLOB」は、選択したデータベース管理システムの BLOB タイプに対応します。以下は、一般的に使用されるデータベース管理システムの BLOB タイプです。
MySQL: LONGBLOB
- PostgreSQL: BYTEA
- MSSQL: BLOB
- 注: php.ini で設定された session.hash_function に従って、id 列の長さを調整する必要があります。たとえば、session.hash_function=sha256 の場合は、長さ 40 ではなく 64 の char 型を使用する必要があります。 。
フラッシュデータ
フラッシュデータは特別な種類のセッションデータであり、一度リクエストに設定されると、次のリクエストでのみ有効になり、その後データは自動的に削除されます。 ユーザーがフォームを送信した後に確認情報を表示するなど、エンド ユーザーに 1 回だけ表示する必要がある情報を実装するためによく使用されます。
セッションは、セッション アプリケーション コンポーネントを通じて設定またはアクセスできます。例:リーリー
通常のセッションデータと同様に、任意のデータをフラッシュデータとして保存できます。yiiwebSession::setFlash() を呼び出すと、同じ名前の既存のデータは自動的に上書きされ、同じ名前の既存のフラッシュにデータを追加するには、代わりに yiiwebSession::addFlash() を呼び出すことができます。 例:
リーリー
注: yiiwebSession::setFlash() と yiiwebSession::addFlash() を同じ名前のフラッシュ データに使用しないでください。後者の予防策を使用すると、新しいフラッシュ データを追加できるようにフラッシュ情報が自動的に配列に変換されます。したがって、 yiiwebSession::getFlash() を呼び出すと、これら 2 つのメソッドを呼び出す順序に応じて、配列を取得する場合もあれば、文字列を取得する場合もあります。クッキー
Yii は、yiiwebCookie オブジェクトを使用して各 cookie を表します。yiiwebRequest と yiiwebResponse は、「cookies」という名前の属性を通じて cookie コレクションを維持し、前者の cookie コレクションはリクエストによって送信された cookie を表し、後者の cookie コレクションはユーザーに送信された cookie を表します。 。
クッキーを読む
現在要求されている Cookie 情報は、次のコードを通じて取得できます: リーリー
クッキーを送信
次のコードを使用してエンド ユーザーに Cookie を送信できます: 次のコードを使用してエンド ユーザーに Cookie を送信できます: リーリー
上記の例で定義された yiiwebCookie::name 属性と yiiwebCookie::value 属性に加えて、yiiwebCookie クラスは、yiiwebCookie::domain、yiiwebCookie::expire など、さまざまな Cookie 情報を実装するための他の属性も定義します。属性を Cookie に追加し、応答 Cookie コレクションに追加します。
注意: 为安全起见yii\web\Cookie::httpOnly 被设置为true,这可减少客户端脚本访问受保护cookie(如果浏览器支持)的风险, 更多详情可阅读 httpOnly wiki article for more details.
Cookie验证
在上两节中,当通过request 和 response 组件读取和发送cookie时,你会喜欢扩展的cookie验证的保障安全功能,它能 使cookie不被客户端修改。该功能通过给每个cookie签发一个哈希字符串来告知服务端cookie是否在客户端被修改, 如果被修改,通过request组件的yii\web\Request::cookiescookie集合访问不到该cookie。
注意: Cookie验证只保护cookie值被修改,如果一个cookie验证失败,仍然可以通过$_COOKIE来访问该cookie, 因为这是第三方库对未通过cookie验证自定义的操作方式。
Cookie验证默认启用,可以设置yii\web\Request::enableCookieValidation属性为false来禁用它,尽管如此,我们强烈建议启用它。
注意: 直接通过$_COOKIE 和 setcookie() 读取和发送的Cookie不会被验证。
当使用cookie验证,必须指定yii\web\Request::cookieValidationKey,它是用来生成s上述的哈希值, 可通过在应用配置中配置request 组件。
return [ 'components' => [ 'request' => [ 'cookieValidationKey' => 'fill in a secret key here', ], ], ];
补充: yii\web\Request::cookieValidationKey 对你的应用安全很重要, 应只被你信任的人知晓,请不要将它放入版本控制中。
您可能感兴趣的文章:
- PHP的Yii框架中行为的定义与绑定方法讲解
- 详解在PHP的Yii框架中使用行为Behaviors的方法
- 深入讲解PHP的Yii框架中的属性(Property)
- 解读PHP的Yii框架中请求与响应的处理流程
- PHP的Yii框架中使用数据库的配置和SQL操作实例教程
- 实例讲解如何在PHP的Yii框架中进行错误和异常处理
- 简要剖析PHP的Yii框架的组件化机制的基本知识
- PHP的Yii框架中YiiBase入口类的扩展写法示例
- 详解PHP的Yii框架的运行机制及其路由功能
- 深入解析PHP的Yii框架中的event事件机制
- 全面解读PHP的Yii框架中的日志功能
- PHP的Yii框架中移除组件所绑定的行为的方法

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

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

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

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

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック









PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

ファイルのアップロードを行うには、フォーム ヘルパーを使用します。ここではファイルアップロードの例を示します。

CakePHP は、PHP 用のオープンソース フレームワークです。これは、アプリケーションの開発、展開、保守をより簡単にすることを目的としています。 CakePHP は、強力かつ理解しやすい MVC のようなアーキテクチャに基づいています。モデル、ビュー、コントローラー

CakePHP へのログインは非常に簡単な作業です。使用する関数は 1 つだけです。 cronjob などのバックグラウンド プロセスのエラー、例外、ユーザー アクティビティ、ユーザーが実行したアクションをログに記録できます。 CakePHP でのデータのログ記録は簡単です。 log()関数が提供されています

Visual Studio Code (VS Code とも呼ばれる) は、すべての主要なオペレーティング システムで利用できる無料のソース コード エディター (統合開発環境 (IDE)) です。 多くのプログラミング言語の拡張機能の大規模なコレクションを備えた VS Code は、
