Yii::app()->user->setState('ccGiftItemDetail', $giftItemDetail );
Yii::app()->user->setState ('ccSelectedMerchantId', $model->attributes ['merchantId']);
我有这个代码叫Yii::app()->user->setState()
。我想知道它将被保存的位置以及Yii2中setState()
和Cookie之间的主要区别是什么?
答案 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