我对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,而不是一个由包含ID、ClickBannerId等的字符串组成的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开发人员