鍍金池/ 問答/PHP  HTML/ 在框架的會話中對于session的讀取

在框架的會話中對于session的讀取

在項目中,有人在使用的時候才讀取用戶的session數(shù)據(jù),但是在每次讀取前都要判斷Session是否存在.
于是就突發(fā)奇想
定義一個BaseUserModel 用戶基礎(chǔ)模型類 繼承了Model類!
在用戶基礎(chǔ)模型類里面將用戶的ID和數(shù)據(jù)對象從session讀取

class BaseUserModel extend Model{
    protected static $uid = ''; //用戶ID 
    protected static $userData = []; //用戶對象 不是原始數(shù)據(jù)
    
    public function initialize()
    {
        self::$uid = Session::get('user.id'); //從Session中拿到用戶ID
        $userData = User::where(['id' => self::$uid])->find(); //拿到用戶信息
        self::$userData = $userData; //將用戶信息賦值給數(shù)據(jù)
    }
}

再定義一個用戶基礎(chǔ)控制器類
BaseUSerController

class BaseUSerController extend Controller{
    protected static $uid = ''; //用戶ID
    protected static $userData = []; //用戶對象 不是原始數(shù)據(jù)
    
    public function initialize()
    {
    if (false === Session::has('user'))   return $this->error('未登錄','users/Login/index');
    self::$uid = Session::get('user.id'); //從Session中拿到用戶ID
        $userData = User::where(['id' => self::$uid])->find(); //拿到用戶信息
         $userData = User::where(['id' => self::$uid])->find(); //拿到用戶信息
        if (null === $userData) return $this->error('非法操作,請重新登錄');
        self::$userData = $userData; //將用戶信息復(fù)制給數(shù)據(jù)
        
        //權(quán)限驗證之類的操作
    }
}

在使用到用戶數(shù)據(jù)的時候控制器繼承用戶基礎(chǔ)控制器,要操作用戶數(shù)據(jù)的時候繼承用戶基礎(chǔ)模型類;
以后就不用每次都判斷用戶Session存在,使用的時候只要self::$uid就可以了,很方便,但是參考別人的代碼 基本都是用的時候才去判斷是否存在,存在了拿到用戶數(shù)據(jù);

請大家給個意見,哪種較好?

回答
編輯回答
你好胸

樓主的想法很好,其實一般情況就是這樣做的,我不知道你看的是什么人的代碼,除非需要判斷的地方很少,不然,一般是把需要登錄的放到一起,再繼承一個基類,在基類的_initialize()函數(shù)中把子類都需要用的數(shù)據(jù)和權(quán)限判斷處理好。

另外,用戶信息不需要每次請求都去數(shù)據(jù)庫找,可以直接放到session中。

2017年5月29日 17:17