0

我对 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 我在做什么错

4

2 回答 2

2

通常在 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,但只有您和您的应用程序(或您的开发人员)可以说出来。

请注意,您可以为每个 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 可用的域)
  • cookie_secure(如果 cookie 只能通过 HTTPS 使用,则将此设置为true )
  • cookie_httponly(确定是否只允许通过 HTTP 而不是客户端脚本使用 cookie)

请注意,在较旧的 Agavi 版本中不需要ae命名空间,因此您可能需要使用parameter而不是ae:parameter

要删除 cookie,您只需调用unsetCookie并使用与设置 cookie 相同的所有参数。要获取 cookie 值,只需调用getCookie($name)。由于 cookie 是不受信任的用户提供的信息,因此 Agavi 通常要求您验证所有传入的参数、文件、标题和 cookie,然后才能在您的操作视图中访问它们。这意味着,您可能需要在访问其值之前验证您的 cookie。您可以通过validate.xml文件执行此操作:

<validator class="string" source="cookie" required="false">
    <argument>cookieName</argument>
</validator>

此示例已简化,不应在生产中使用。使用source _cookie_ 和 cookie 的名称作为参数,然后根据您的规则(格式等)验证您的 cookie 值。如果内置AgaviValidator类(如字符串、正则表达式等)不够用,则可能需要编写自定义验证器,但这是另一天的话题。您可能会发现Agavi 用户常见问题解答有些帮助。对不起,无耻的插头,祝你手头的问题好运。:-)

于 2012-07-23T21:05:30.393 回答
0

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

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

正如 OcuS 在评论中所说 - 可能聘请 PHP 开发人员

于 2012-07-22T11:46:26.040 回答