2014-07-20 35 views
0
餅乾

我已經設置會話我的屬性/在WEBUSER方法,如以下真正的困境使用會話時,Yii中

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

在配置,我已設置自動啓動會議,以「真」,cookieMode爲「只」。我明白,當我'setState',具有相同名稱的cookie也與會話變量一起創建。目前,我打電話用Yii::app()->user->roleId;

我的問題,這些變量是這樣的: 一)要從cookie和/或已經設置會話變量的使用,我應該叫他們使用Yii::app()->request->cookies['roleId']; or Yii::app()->session['roleId']?

的B)將調用Yii::app()->user->roleId GET我的價值,如果它已被設置爲Cookie或會話,而不是再次運行整個方法?

我很感謝您的支持!

回答

0

我只會使用會話。 Cookie很容易被篡改,用戶可能會爲自己指定另一個角色ID。會議有點安全。

爲此,請使用WebUsers getRole(),將它緩存到會話中,就像上面一樣。這可以。只需在頂部放一張支票,如果有一個會話變種roleId立即返回它。如果沒有,請加載用戶並像您已有的那樣獲取它。

+0

謝謝,這似乎是一個很好的解決方案。但我已經允許cookies。你認爲我應該禁用cookies嗎?當我使用會話和cookie並且有人篡改cookie時會發生什麼?我應該在哪裏實際使用Cookie呢? –

+0

根本沒有。我的意思是不要將關鍵變量保存在cookie中。把cookies放在一邊很好,當然你至少需要存儲會話ID,否則你的會話將無法工作。 –

+0

這就是我所做的。請檢查: public function getRoleId(){ if($ this-> hasState(「roleId」)){return $ this-> getState(「roleId」);} $ user = $ this-> loadUser(Yii ::應用程序() - >用戶> ID); $ this-> setState('roleId',$ user-> roles_id); 返回$ user-> roles_id; } –