Phalcon Cookie 管理


Cookies是存储在浏览器中的小文本文件,它保存了所有与用户身份有关的信息,一旦用户浏览了不同的页面,这些信息就会被用来验证他们的身份。

有两种不同类型的Cookies

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

  • 持久性 Cookie: 拥有指定的生命周期,并在生命周期内保留在浏览器中,那些使用持久性 cookie 的网站会跟踪每个用户,即使用户关闭了浏览器。

现在让我们讨论 cookie 在 Phalcon 中是如何工作的。

Phalcon 中的Cookie


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

以下是设置Cookie的语法:

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

使用以下代码,我们将在用户登录 Web 应用程序时创建用户的 cookie:

<?php  

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

加密的 cookie 将作为输出显示:

Displayed Output

解释


名为 "loginAction "的cookie已被创建,其值为 "abc"。

indexAction 方法检查该cookie是否存在,并相应地打印出该值。

Cookie 加密


Phalcon中的Cookies在作为请求发送到服务器之前是经过加密的,一旦我们从服务器得到适当的回应,就会解密。这保证了授权用户的安全。

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

Encription


/** 
    * 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$'); // 使用唯一的密钥!
        return $crypt;
    }
);

注意

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

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

  • 建议只在 cookie 中存储必要的小数据和文字。