Phalcon - Cookie 管理


Cookie 也称为浏览器 cookie,是存储在浏览器中的小文本文件。它保存了与用户身份相关的所有信息。该信息用于在用户浏览不同页面时验证用户。

有两种不同类型的 Cookie -

  • 会话 Cookie - 这些类型的 Cookie 保留在浏览器上并保留信息,直到浏览器关闭。一旦打开浏览器,它将被视为同一用户的新会话。

  • 持久性 Cookie - 它具有规定的寿命,并在给定的寿命内保留在浏览器中。那些使用持久性 Cookie 的网站会跟踪每个用户,即使浏览器已被用户关闭。

现在让我们讨论 cookie 在 Phalcon 中的工作原理。

Phalcon 的cookie

Phalcon 使用Phalcon\Http\Response\Cookies作为 cookie 的全局存储。向服务器发送请求时,Cookie 存储在 Phalcon 中。

以下是设置 Cookie 的语法 -

$this->cookies->set( 
   "<cookie-name>", 
   "<cookie-value>", 
   time 
); 

考虑以下示例。使用以下代码,当用户登录网络应用程序时,我们将创建用户的 cookie。

<?php  

class UsersController extends \Phalcon\Mvc\Controller { 
   public function indexAction() { 
      if ($this->cookies->has("login-action")) { 
         // Get the cookie 
         $loginCookie = $this->cookies->get("login-action"); 
         
         // Get the cookie's value 
         $value = $loginCookie->getValue(); 
         echo($value); 
      } 
      $this->cookies->set( 
         "login-action", 
         "abc", 
         time() + 15 * 86400 
      ); 
   } 
}            

加密的 cookie 将显示为输出。

显示输出

描述

已创建名为“loginAction”的 Cookie ,其值为“abc”

“indexAction”方法检查cookie是否存在并打印相应的值。

Cookie 的加密

Phalcon 中的 Cookie 在作为请求发送到服务器之前会进行加密,并在我们从服务器收到适当的响应后立即解密。这确保了授权用户的安全。

尽管具有加密和解密功能,但始终建议避免在 cookie 中存储敏感数据。cookie 加密的配置包含在services.php文件中。

编码

/** 
   * Enable encryption key for setting values of cookies 
*/  

$di->set( 
   "cookies", function () { 
      $cookies = new Cookies();  
      $cookies->useEncryption(false);  
      return $cookies; 
   } 
); 

/** 
   * Set encryption key 
*/ 

$di->set( 
   "crypt", function () { 
      $crypt = new Crypt(); 
      $crypt->setKey('AED@!sft56$'); // Use a unique Key!  
      return $crypt; 
   } 
);      

注意-

  • 始终建议在向服务器发送 cookie 时使用加密。

  • 如果不使用加密,所有内部应用程序都将暴露给攻击者。

  • 还建议在 cookie 中存储小数据和文字。