tutorial sesiones que español control basado acceso php yii yii2

php - sesiones - ¿Cómo agregar más atributos de sesión de identidad de usuario en Yii2?



yii2 2019 (4)

En Yii2, puede acceder a la interfaz de identidad del usuario actual utilizando el objeto identityInterface desde la clase / yii / web / User con algo como esto

/Yii::$app->user->identity->id;

¿Hay alguna forma de obtener y establecer parámetros adicionales (sin ampliar la clase de identidad)?

Básicamente, un equivalente de los getState() y setState() de CWebUser en CWebUser para almacenar y recuperar información de sesión como esta

Yii::app()->user->setState("some_attribute",$value); Yii::app()->user->getState(''some_attribute'',$defaultValue);


En Yii2 / Yii :: $ app-> user-> identity contiene la instancia de la clase de identidad. Por lo tanto, si desea algunos datos relacionados con identityClass, solo úselo como una instancia de identityClass.


Está bien, parece que esto fue eliminado intencionalmente para evitar la "confusión". Consulte https://github.com/yiisoft/yii2/issues/167 . Así que la única forma de hacerlo es llamando directamente a la clase de la sesión.

/Yii::$app->session->set(''user.attribute'',$value); /Yii::$app->session->get(''user.some_attribute'');

Debido a que ahora se almacena directamente en la sesión sin prefijo, es mejor hacer un espacio de nombre en las claves con identificadores como user.xxxx para evitar la colisión con otras claves establecidas en diferentes puntos de la aplicación.


La mejor manera de agregar atributos al usuario es crear un atributo público en su clase de usuario.

class Yiidentity extends ActiveRecord implements /yii/web/IdentityInterface{ public $awesomeAttribute = "foo"; }

Cómo utilizar:

Yii::$app->user->identity->awesomeAttribute;


También puede utilizar una función de obtención para incluir información de identidad adicional para el usuario. Por ejemplo, recuperar el nombre fullname de una tabla de perfil.

class User extends ActiveRecord implements /yii/web/IdentityInterface { // Other code goes here... public function getFullname() { $profile = Profile::find()->where([''user_id''=>$this->id])->one(); if ($profile !==null) return $profile->fullname; return false; } }

Luego, puede usarlo como si tuviera un atributo llamado nombre fullname , como así

Yii::$app->user->identity->fullname;