【问题标题】:Cookie creation in zend framework 2Zend 框架 2 中的 Cookie 创建
【发布时间】:2014-08-02 10:27:43
【问题描述】:

我需要帮助在 zend 框架 2 中创建 cookie。

我想不出实现它的正确方法。我试图创建 cookie 对象并使用来自Zend Http Client documentation 的代码进行分配。

这并没有给我错误,所以我假设 cookie 已创建,但我无法在其中指定过期时间,以及如何获取我创建的这两个 cookie 变量数据并检查此 cookie存在。

我需要这些方面的帮助,如果我编码错误,请向我展示如何创建 cookie 的代码,然后检查它是否存在,然后从中获取值?

【问题讨论】:

  • 您能否将您使用的确切代码添加到问题中而不是手册链接?
  • 嗨@foozy 我用过这个代码 $cookies = new \Zend\Http\Client(); $cookies->addCookie('emailcookie', $email); $cookies->addCookie('passwordcookie', $password);但我无法在其中指定到期时间,以及如何获取我创建的这两个 cookie 变量数据并检查此 cookie 是否存在。

标签: zend-framework cookies zend-framework2


【解决方案1】:

这是我要创建的代码,这可能有助于其他人使用 zend 框架 2 =>

$cookie1 = new \Zend\Http\Header\SetCookie('emailcookie', $email, time() + (((30*24)*60)*60));
$cookie2 = new \Zend\Http\Header\SetCookie('passwordcookie', $password, time() + (((30*24)*60)*60));

$this->getResponse()->getHeaders()->addHeader($cookie1);
$this->getResponse()->getHeaders()->addHeader($cookie2);

// For unsetting cookie:
$getcookie=$request->getCookie(); // returns object of Zend\Http\Header\Cookie

$chkemailcookieexist=$getcookie->offsetExists('emailcookie');

$chkpasswordcookieexist=$getcookie->offsetExists('passwordcookie');

// var_dump($chkemailcookieexist);
$prevdatetime=strtotime('-1 day', strtotime(date('Y-m-d')));

if($chkemailcookieexist)
{
    $cookie1 = new \Zend\Http\Header\SetCookie('emailcookie', $email,$prevdatetime);
    $this->getResponse()->getHeaders()->addHeader($cookie1);
}

// var_dump($chkpasswordcookieexist);
if($chkpasswordcookieexist)
{
    $cookie2 = new \Zend\Http\Header\SetCookie('passwordcookie', $password, $prevdatetime);
    $this->getResponse()->getHeaders()->addHeader($cookie2);
}

【讨论】:

  • 在 cookie 中存储密码确实是个坏主意。 Cookie 很容易受到攻击。即使密码经过哈希处理,也不安全。
  • 是的,那是真的,那么你将如何实施记住我@lku
  • 我认为,如果您对此有任何具体问题,最好再创建一个问题。但是有很多关于这个话题的资源,比如这篇文章:jaspan.com/improved_persistent_login_cookie_best_practice
【解决方案2】:

您可以使用 SetCookie 标头类 (Zend\Http\Header\SetCookie)。例如在您的控制器中:

$cookie = new SetCookie('cookieName', 'cookieValue', time() + 60 * 60 * 24 * 1);
$this->getResponse()->getHeaders()->addHeader($cookie);

检查类构造函数,你可以在那里设置所有需要的标志。

然后你可以从 Zend\Http\Request 中读取 cookie,例如在控制器中:

$cookieValue = $this->getRequest()->getCookie()->cookieName;

getCookie 方法在哪里返回 Zend\Http\Header\Cookie,它是 ArrayObject 并且包含来自请求的所有 cookie。

【讨论】:

  • 嗨@lku 如果以这种方式创建cookie,那么在zend framework 2中从cookie获取数据并检查它是否存在的代码是什么
  • 嗨@lku 谢谢我已经做到了,我从你的代码中得到了一些想法,这很有帮助,你能告诉我代码在zend framework 2中取消设置cookie变量吗
  • @Soumik :您需要发送具有过去过期日期的相同 cookie。浏览器将在下一个请求中删除该 cookie。
  • 嗨@lku我们可以使用cookie类的任何未设置方法来做到这一点吗,实际上我正在经历cookie类的一些方法,但没有奏效。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-13
  • 1970-01-01
相关资源
最近更新 更多