通常、Agavi 内では、 setCookieメソッドを介してAgaviWebResponseオブジェクトのAgaviViewにCookie を設定します。メソッドのシグネチャは次のとおりです。
public function setCookie($name, $value, $lifetime = null, $path = null, $domain = null, $secure = null, $httponly = null)
つまり、次の構文を使用して単純な Cookie を設定できます。
$this->getResponse()->setCookie('cookieName', $cookieValue);
特定の期間のみ有効な Cookie が必要な場合は、 PHP の strtotime 関数を使用して、Cookie に読みやすい有効期間を設定できます。
$this->getResponse()->setCookie('cookieName', $cookieValue, '+14 days');
あなたの質問が述べているように、追加のパラメーター (ドメインなど) も使用したい場合があります。ID、ClickBannerIdなどを含む文字列で構成されるものではなく、複数の Cookie を設定することもできますが、あなたとあなたのアプリケーション (または開発者) だけがそれを伝えることができます。
ビューに入力する手間を省くために、環境ごとにapp/config/factories.xmlファイル(通常はコンテキスト_web_ 用)
で、Cookie ごとに追加のパラメーターを設定したり、アプリケーションの適切なデフォルトを設定したりできることに注意してください。
<response class="AgaviWebResponse">
<ae:parameters name="cookie_httponly">true</ae:parameters>
</response>
有効なパラメーター名は次のとおりです。
- cookie_lifetime (秒単位の寿命)
- cookie_path (Cookie を使用できるサーバー上のパス)
- cookie_domain (Cookie が利用可能なドメイン)
- cookie_secure ( HTTPS 経由でのみ Cookie を使用できるようにする場合は、これをtrueに設定します)
- cookie_httponly (クライアント側のスクリプトではなく、HTTP 経由でのみ Cookie の使用を許可するかどうかを決定します)
古い Agavi バージョンではae名前空間は不要であったため、 ae:parameterの代わりにparameterを使用する必要がある場合があることに注意してください。
Cookie を削除するには、Cookieの設定に使用したのと同じパラメーターをすべて使用してunsetCookieを呼び出します。Cookie 値を取得するには、getCookie($name)を呼び出すだけです。Cookie は信頼されていないユーザー提供の情報であるため、通常、Agavi では、アクションやビューでそれらにアクセスする前に、すべての受信パラメーター、ファイル、ヘッダー、および Cookie を検証する必要があります。つまり、Cookie の値にアクセスする前に、Cookie を検証する必要がある場合があります。これは、 validate.xmlファイル
を介して行います。
<validator class="string" source="cookie" required="false">
<argument>cookieName</argument>
</validator>
この例は単純化されているため、本番環境では使用しないでください。引数にsource _cookie_ と Cookie の名前を使用し、ルール (形式など) に従って Cookie の値を検証します。組み込みのAgaviValidatorクラス (文字列、正規表現など) が十分でない場合は、カスタム バリデータを作成する必要があるかもしれませんが、これは別の機会に取り上げます。Agavi User FAQが多少役立つかもしれません。恥知らずなプラグインで申し訳ありませんが、目の前の問題を頑張ってください。:-)