Phalcon

Phalconのクッキー管理

更新日:

クッキーは、ユーザーが自身のブラウザを閉じた場合でも再取得することができる、クライアントにデータの小片を保存するための非常に便利な方法です。phalcon\Http\Response\Cookiesコンポーネントは、クッキーのグローバルバッグとして機能します。クッキーは、リクエストの実行中にこのバッグに格納され、リクエストの終了時に自動的に送信されます。

基本的な使い方

あなただけのサービスにアクセスできるアプリケーションのどの部分で「クッキー」のサービスにアクセスすることにより、クッキーを取得/設定することができます。

<?php
class SessionController extends Phalcon\Mvc\Controller
 {
 public function loginAction()
 {
 //クッキーが以前にセットされているかどうかチェック
 if ($this->cookies->has('remember-me')) {
//クッキーの取得
 $rememberMe = $this->cookies->get('remember-me');
//クッキーの値を取得
 $value = $rememberMe->getValue();
}
 }
public function startAction()
 {
 $this->cookies->set('remember-me', 'some value', time() + 15 * 86400);
 }
 }

クッキーの暗号化、複合化

デフォルトでは、クッキーは自動的にクライアントに送信され、検索された際に復号化される前に暗号化されます。この保護は、権限のないユーザーがクライアント(ブラウザ)にクッキー」の内容を参照することができます。この保護が、機密データがCookieに保存されるべきではありません。

あなたは、次の方法で暗号化を無効にすることができます。

<?php
$di->set('cookies', function() {
 $cookies = new Phalcon\Http\Response\Cookies();
 $cookies->useEncryption(false);
 return $cookies;
 });

暗号化を使用する場合にはグローバルキーは「crypt」サービスに設定する必要があります。

<?php
$di->set('crypt', function() {
 $crypt = new Phalcon\Crypt();
 $crypt->setKey('#1dj8$=dp?.ak//j1V$'); //自分自身のキーを使用してください
 return $crypt;
 });

サービス情報などを含むクライアントを暗号化せずにクッキーデータを送信してみてください。結果セットやサービス情報等は、アプリケーションを攻撃するために攻撃者によって使用され、複雑なオブジェクト構造や、内部アプリケーションの詳細を公開されてしまいます。あなたが暗号化を使用したくない場合は、数字のみや小さな文字列リテラルのような非常に基本的なクッキーのみのデータ送信お勧めします。

本日は、以上です。

本日のまとめ

  1. クッキーは、Phalcon\Http\Response\Cookiesコンポーネントを使用する
  2. CookiesコンポーネントはデフォルトでResponseコンポーネントの一部として登録されているのでインスタンス化不要
  3. クッキーのチェックには、has()メソッドを使用する
    • $this->cookies->has('クッキー名');
  4. クッキーの取得には、get()メソッドを使用する
    • $this->cookies->get('クッキー名');
  5. クッキーの値の取得には、get()->getValue()メソッドチェーンを使用する
    • $this->cookies->get('クッキー名')->getValue();
  6. クッキーのセットには、set()メソッドを使用する
    • $this->cookies->set('クッキー名','値','保持期間');
  7. クッキーは原則として暗号化すること
  8. 暗号化には、Phalcon\Cryptコンポーネントを使用する
  9. Cryptを使用するには、setKey()メソッドで、自分自身の暗号化キーを登録する
  10. クッキーの暗号化は、encrypt()メソッドを使用する
    • encrypt('テキスト','暗号化キー')
  11. クッキーの複合化は、decrypt()メソッドを使用する
    • decrypt('暗号化されたテキスト','暗号化キー')
  12. 使用例
    • $crypt=new \Phalcon\Crypt();
      $key='暗号化キー';
      $text='クッキーとして保存するテキスト';
      $encrypted=$crypt->encrypt($text,$key); //暗号化
      echo $crypt->decrypt($encrypted,$key);  //複合化

-Phalcon

Copyright© WinRoad徒然草 , 2018 All Rights Reserved Powered by AFFINGER5.