ホームページ > バックエンド開発 > PHPチュートリアル > PHP の Yii フレームワークの cookie およびセッション関数の関連操作を分析する、yiicookie_PHP チュートリアル

PHP の Yii フレームワークの cookie およびセッション関数の関連操作を分析する、yiicookie_PHP チュートリアル

WBOY
リリース: 2016-07-12 08:56:30
オリジナル
814 人が閲覧しました

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框架中移除组件所绑定的行为的方法

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/1111914.htmlTechArticle解析PHP的Yii框架中cookie和session功能的相关操作,yiicookie Sessions 和 请求 和 响应类似, 默认可通过为yii\web\Session 实例的session 应用组件 来访...
関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート