一般於Agavi的你通過其setCookie方法設置AgaviWebResponse物件上AgaviView餅乾方法。該方法的簽名如下:
public function setCookie($name, $value, $lifetime = null, $path = null, $domain = null, $secure = null, $httponly = null)
這意味着,你可以使用下面的語法設定一個簡單的cookie:
$this->getResponse()->setCookie('cookieName', $cookieValue);
您可以使用PHP's strtotime function來設置易於閱讀的一生如果您想要一個僅在一定時間內有效的Cookie,則Cookie:
$this->getResponse()->setCookie('cookieName', $cookieValue, '+14 days');
你的問題指出,你可能需要使用額外的參數(域名等)爲好。讀你的問題,也有可能,要設置多個cookie,而不是一個由含有ID,ClickBannerId等字符串,但只有你和你的應用程序(或您的開發),可以告訴大家。
請注意,您可以爲每個cookie設置附加參數,或者在app/config/factories中爲您的應用程序配置一些理智的默認值。XML每環境(通常爲方面 _web_)文件保存在您的意見中鍵入:
<response class="AgaviWebResponse">
<ae:parameters name="cookie_httponly">true</ae:parameters>
</response>
有效的參數名稱是:
- cookie_lifetime(以秒爲一生)
- cookie_path(服務器上cookie應該可用的路徑)
- cookie_domain(域餅乾可以用)
- cookie_secure(將其設置爲真如果cookie只應通過HTTPS提供)
- cookie_httponly(確定Cookie是否應只允許通過HTTP,而不是客戶端腳本使用)
請注意,該AE命名空間是不能在較早的Agavi版本必需的,因此可能需要您使用參數而不是AE:參數。
要刪除cookie,您只需撥打unsetCookie,其中所有參數都用於設置Cookie。要獲取cookie值,只需致電getCookie($ name)。由於Cookie是不可信的用戶提供的信息,通常Agavi要求您驗證所有傳入參數,文件,標題和Cookie,然後才能在您的動作和視圖中訪問它們。這意味着您可能需要在訪問其值之前驗證您的Cookie。你可以通過一個validate.xml文件做到這一點:
<validator class="string" source="cookie" required="false">
<argument>cookieName</argument>
</validator>
這個例子是簡化的,不應在生產中使用。使用來源 _cookie_和參數的cookie名稱,然後根據您的規則(格式等)驗證您的Cookie值。如果內建的類(如字符串,正則表達式等)不夠用,可能需要編寫自定義驗證器,但這是另一天的主題。您可能會發現Agavi User FAQ有所幫助。對不起,無恥的插頭,祝你手頭有問題。 :-)
哇我真的不知道 – 2012-07-22 11:47:05