Yii :: app() - > user-> setState()和Yii :: $ app-> request-> cookies之间有什么区别?

时间:2015-12-03 07:46:18

标签: yii yii2

Yii::app()->user->setState('ccGiftItemDetail', $giftItemDetail );
Yii::app()->user->setState ('ccSelectedMerchantId', $model->attributes ['merchantId']);

我有这个代码叫Yii::app()->user->setState()。我想知道它将被保存的位置以及Yii2中setState()和Cookie之间的主要区别是什么?

3 个答案:

答案 0 :(得分:0)

首先,Yii::app()->user->setState()来自Yii1,Yii::$app->request->cookies来自Yii2。

setState()官方俄语论坛this thread中可用的内容进行了很好的解释。其实质是用于保存经常使用的用户相关数据并在以后访问它。它使用会话和cookie,主要优点是它保留在不同的会话之间。

至于Yii::$app->request->cookies,官方文档here中提供了有关使用示例的详细解释。

答案 1 :(得分:0)

setState()用于保存session中的值,CWebUser.php中的setState()函数可能会给您一个明确的想法:

    /**
     * Stores a variable in user session.
     *
     * This function is designed to be used by CWebUser descendant classes
     * who want to store additional user information in user session.
     * By storing a variable using this function, the variable may be retrieved
     * back later using {@link getState}. The variable will be persistent
     * across page requests during a user session.
     *
     * @param string $key variable name
     * @param mixed $value variable value
     * @param mixed $defaultValue default value. If $value===$defaultValue, the variable will be
     * removed from the session
     * @see getState
     */
    public function setState($key,$value,$defaultValue=null)
    {
        $key=$this->getStateKeyPrefix().$key;
        if($value===$defaultValue)
            unset($_SESSION[$key]);
        else
            $_SESSION[$key]=$value;
    }

顾名思义Yii::app()->request->cookies处理cookies,请查看函数addCookie(),它可能会给你一个想法:

    /**
     * Sends a cookie.
     * @param CHttpCookie $cookie cookie to be sent
     */
    protected function addCookie($cookie)
    {
        $value=$cookie->value;
        if($this->_request->enableCookieValidation)
            $value=Yii::app()->getSecurityManager()->hashData(serialize($value));
        if(version_compare(PHP_VERSION,'5.2.0','>='))
            setcookie($cookie->name,$value,$cookie->expire,$cookie->path,$cookie->domain,$cookie->secure,$cookie->httpOnly);
        else
            setcookie($cookie->name,$value,$cookie->expire,$cookie->path,$cookie->domain,$cookie->secure);
    }

答案 2 :(得分:0)

Yii::$app->session->set('someextradata','somevalue')对每个用户都是唯一的。 look here