阿加维饼干


agavi set cookie

我对agavi一无所知,可能会有很多错误。。

我想设置一个cookie:

$this->getResponse()->setCookie( ID, 'ID=2342&ClickBannerID=634&SubID=&ClickDateTime=' + time(), mixed $lifetime = time() * 2, string $path = '/', string $domain = 'mydomain', bool $secure = null)


我得到:分析错误:语法错误,意外的T_VARIABLE

它的形式:http://www.agavi.org/apidocs/index.html我做错了什么

通常在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');

正如您的问题所述,您可能也想使用其他参数(域等)。阅读您的问题时,您也可能希望设置多个cookie,而不是一个由包含IDClickBannerId等的字符串组成的cookie,但只有您和您的应用程序(或开发人员)才能知道这一点。

请注意,您可以在环境app/config/filents.xml文件中为每个cookie设置附加参数或为应用程序配置一些合理的默认值(通常用于上下文_web_),以节省在视图中键入的时间:

<response class="AgaviWebResponse">
    <ae:parameters name="cookie_httponly">true</ae:parameters>
</response>

有效的参数名称为:

  • cookie_lifetime(生存时间(秒))
  • cookie_path(cookie应该可用于的服务器上的路径)
  • cookie_domain(cookie所在的域)
  • cookie_secure(如果cookie只能通过HTTPS使用,则将其设置为true
  • cookie_httponly(确定是否只允许通过HTTP而不允许通过客户端脚本使用cookie)

请注意,ae命名空间在旧的Agavi版本中是不必要的,因此可能需要使用参数而不是ea: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用户常见问题解答有些帮助。很抱歉出现了无耻的插头,祝你好运。:-)

您将函数声明与其运行混合

$this->getResponse()->setCookie( 'your-cookie-id','ID=2342&ClickBannerID=634&SubID=&ClickDateTime=' . time(),  time() * 2,  '/',  
'mydomain', null)

正如OcuS在评论中所说,可能会雇佣一名PHP开发人员