2014-07-20 1 views
0

J'ai mis des sessions pour mes propriétés/méthodes WebUser comme suitDilemme réel lors de l'utilisation des sessions, cookies dans Yii

public function getRole(){ 
$user = $this->loadUser(Yii::app()->user->id); 
$this->setState('roleId', $user->roles_id); 
return $user->roles_id; 
} 

Dans la config, je l'ai mis en sessions Autostart 'true', cookieMode à « seulement '. Je comprends que quand je «setState», le cookie avec le même nom est également créé avec la variable de session. Actuellement, je fais appel à ces variables à l'aide Yii::app()->user->roleId;

Ma question est la suivante: a) Pour utiliser des cookies et/ou les variables de session déjà définies, devrais-je les appeler à l'aide Yii::app()->request->cookies['roleId']; or Yii::app()->session['roleId']?

b) Est-ce que l'appel Yii::app()->user->roleId get moi la valeur si elle est déjà définie comme Cookie ou Session au lieu d'exécuter à nouveau la méthode entière?

J'apprécie votre soutien!

Répondre

0

Je n'utiliserais que des sessions pour cela. Les cookies peuvent être facilement falsifiés et un utilisateur pourrait probablement lui attribuer un autre identifiant de rôle. La session est un peu plus sûre. Utilisez vos WebUsers getRole() pour cela, ce qui met en cache dans la session comme vous l'avez ci-dessus. C'est bon. Il suffit de mettre une vérification en haut, s'il y a une session var roleId instantanément le retourner. Si ce n'est pas le cas, chargez l'utilisateur et récupérez-le comme vous l'avez déjà fait.

+0

Merci, cela semble être une bonne solution. Mais j'ai déjà autorisé les cookies. Pensez-vous que je devrais désactiver les cookies au total? Que se passe-t-il lorsque j'utilise à la fois les sessions et le cookie et que quelqu'un a trafiqué le cookie? Où devrais-je utiliser des cookies alors? –

+0

Non, pas du tout. Je voulais simplement ne pas enregistrer les variables critiques dans un cookie. Avoir des cookies est bien, et bien sûr vous en avez besoin au moins pour stocker l'ID de session, sinon vos sessions ne fonctionneraient pas. –

+0

C'est ce que j'ai fait. Veuillez vérifier: public function getRoleId() { if ($ this-> hasState ("roleId")) {return $ this-> getState ("roleId");} $ utilisateur = $ this-> loadUser (Yii :: app() -> utilisateur-> id); $ this-> setState ('roleId', $ user-> roles_id); return $ utilisateur-> roles_id; } –