亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > PHP > 正文

關于Yii中處理前后臺登錄的方法實現

2020-03-22 17:33:16
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了Yii中實現處理前后臺登錄的新方法,具體分析了Yii中前后臺登錄的新思路與相關實現技巧,需要的朋友可以參考下

本文實例講述了Yii中實現處理前后臺登錄的新方法。分享給大家供大家參考,具體如下:

因為最近在做一個項目涉及到前后臺登錄問題,我是把后臺作為一個模塊(Module)來處理的。我看很多人放兩個入口文件index.php和admin.php,然后分別指向前臺和后臺。這種方法固然很好,可以將前后臺完全分離,但我總覺得這種方式有點牽強,這和兩個應用啥區別?還不如做兩個App用一個framework更好。而且Yii官方后臺使用方法也是使用Module的方式。但是Moudle的方式有一個很頭疼的問題,就是在使用Cwebuser登錄時會出現前后臺一起登錄一起退出的問題,這顯然是不合理的。我糾結了很久才找到下文即將介紹的方法,當然,很多也是參考別人的,自己稍作了改動。我一開始的做法是在后臺登錄時設置一個isadmin的session,然后再前臺登錄時注銷這個session,這樣做只能辨別是前臺登錄還是后臺登錄,但做不到前后臺一起登錄,也即前臺登錄了后臺就退出了,后臺登錄了前臺就退出了。出現這種原因的根本原因是我們使用了同一個Cwebuser實例,不能同時設置前后臺session,要解決這個問題就要將前后臺使用不同的Cwebuser實例登錄。下面是我的做法,首先看protected- config- main.php里對前臺user(Cwebuser)的配置:

 user = array( html' target='_blank'>class = WebUser ,//這個WebUser是繼承CwebUser,稍后給出它的代碼 stateKeyPrefix = member ,//這個是設置前臺session的前綴 allowAutoLogin = true,//這里設置允許cookie保存登錄信息,一邊下次自動登錄),

在你用Gii生成一個admin(即后臺模塊名稱)模塊時,會在module- admin下生成一個AdminModule.php文件,該類繼承了CWebModule類,下面給出這個文件的代碼,關鍵之處就在該文件,望大家仔細研究:

 ?phpclass AdminModule extends CWebModule public function init() // this method is called when the module is being created // you may place code here to customize the module or the application parent::init();//這步是調用main.php里的配置文件 // import the module-level models and componen $this- setImport(array( admin.models.* , admin.components.* , //這里重寫父類里的組件 //如有需要還可以參考API添加相應組件 Yii::app()- setComponents(array( errorHandler = array( class = CErrorHandler , errorAction = admin/default/error , admin = array( class = AdminWebUser ,//后臺登錄類實例 stateKeyPrefix = admin ,//后臺session前綴 loginUrl = Yii::app()- createUrl( admin/default/login ), ), false); //下面這兩行我一直沒搞定啥意思,貌似CWebModule里也沒generatorPaths屬性和findGenerators()方法 //$this- generatorPaths[]= admin.generators  //$this- controllerMap=$this- findGenerators(); public function beforeControllerAction($controller, $action) if(parent::beforeControllerAction($controller, $action)) $route=$controller- id. / .$action-  if(!$this- allowIp(Yii::app()- request- userHostAddress) $route!== default/error ) throw new CHttpException(403, You are not allowed to access this page.  $publicPages=array( default/login , default/error , if(Yii::app()- admin- isGuest !in_array($route,$publicPages)) Yii::app()- admin- loginRequired(); else return true; return false; protected function allowIp($ip) if(empty($this- ipFilters)) return true; foreach($this- ipFilters as $filter) if($filter=== * || $filter===$ip || (($pos=strpos($filter, * ))!==false !strncmp($ip,$filter,$pos))) return true; return false;? 

AdminModule 的init()方法就是給后臺配置另外的登錄實例,讓前后臺使用不同的CWebUser,并設置后臺session前綴,以便與前臺session區別開來(他們同事存在$_SESSION這個數組里,你可以打印出來看看)。

這樣就已經做到了前后臺登錄分離開了,但是此時你退出的話你就會發現前后臺一起退出了。于是我找到了logout()這個方法,發現他有一個參數$destroySession=true,原來如此,如果你只是logout()的話那就會將session全部注銷,加一個false參數的話就只會注銷當前登錄實例的session了,這也就是為什么要設置前后臺session前綴的原因了,下面我們看看設置了false參數的logout方法是如何注銷session的:

/*** Clears all user identity information from persistent storage. * This will remove the data stored via {@link setState}.public function clearStates() $keys=array_keys($_SESSION); $prefix=$this- getStateKeyPrefix(); $n=strlen($prefix); foreach($keys as $key) if(!strncmp($key,$prefix,$n)) unset($_SESSION[$key]);}

看到沒,就是利用匹配前綴的去注銷的。

到此,我們就可以做到前后臺登錄分離,退出分離了。這樣才更像一個應用,是吧?嘿嘿…

差點忘了說明一下:

Yii::app()- user //前臺訪問用戶信息方法Yii::app()- admin //后臺訪問用戶信息方法

不懂的仔細看一下剛才前后臺CWebUser的配置。

附件1:WebUser.php代碼:

 ?phpclass WebUser extends CWebUser public function __get($name) if ($this- hasState( __userInfo )) { $user=$this- getState( __userInfo ,array()); if (isset($user[$name])) { return $user[$name]; return parent::__get($name); public function login($identity, $duration) { $this- setState( __userInfo , $identity- getUser()); parent::login($identity, $duration);? 

附件2:AdminWebUser.php代碼

 ?phpclass AdminWebUser extends CWebUser public function __get($name) if ($this- hasState( __adminInfo )) { $user=$this- getState( __adminInfo ,array()); if (isset($user[$name])) { return $user[$name]; return parent::__get($name); public function login($identity, $duration) { $this- setState( __adminInfo , $identity- getUser()); parent::login($identity, $duration);? 

附件3:前臺UserIdentity.php代碼

 ?php * UserIdentity represents the data needed to identity a user. * It contains the authentication method that checks if the provided * data can identity the user.class UserIdentity extends CUserIdentity * Authenticates a user. * The example implementation makes sure if the username and password * are both demo . * In practical applications, this should be changed to authenticate * against some persistent user identity storage (e.g. database). * @return boolean whether authentication succeeds. public $user; public $_id; public $username; public function authenticate() $this- errorCode=self::ERROR_PASSWORD_INVALID; $user=User::model()- find( username=:username ,array( :username = $this- username)); if ($user) $encrypted_passwd=trim($user- password); $inputpassword = trim(md5($this- password)); if($inputpassword===$encrypted_passwd) $this- errorCode=self::ERROR_NONE; $this- setUser($user); $this- _id=$user-  $this- username=$user- username; //if(isset(Yii::app()- user- thisisadmin)) // unset (Yii::app()- user- thisisadmin); else $this- errorCode=self::ERROR_PASSWORD_INVALID; else $this- errorCode=self::ERROR_USERNAME_INVALID; unset($user); return !$this- errorCode; public function getUser() return $this- user; public function getId() return $this-  public function getUserName() return $this- username; public function setUser(CActiveRecord $user) $this- user=$user- attributes;}

附件4:后臺UserIdentity.php代碼

 ?php * UserIdentity represents the data needed to identity a user. * It contains the authentication method that checks if the provided * data can identity the user.class UserIdentity extends CUserIdentity * Authenticates a user. * The example implementation makes sure if the username and password * are both demo . * In practical applications, this should be changed to authenticate * against some persistent user identity storage (e.g. database). * @return boolean whether authentication succeeds. public $admin; public $_id; public $username; public function authenticate() $this- errorCode=self::ERROR_PASSWORD_INVALID; $user=Staff::model()- find( username=:username ,array( :username = $this- username)); if ($user) $encrypted_passwd=trim($user- password); $inputpassword = trim(md5($this- password)); if($inputpassword===$encrypted_passwd) $this- errorCode=self::ERROR_NONE; $this- setUser($user); $this- _id=$user-  $this- username=$user- username; // Yii::app()- user- setState( thisisadmin , true  else $this- errorCode=self::ERROR_PASSWORD_INVALID; else $this- errorCode=self::ERROR_USERNAME_INVALID; unset($user); return !$this- errorCode; public function getUser() return $this- admin; public function getId() return $this-  public function getUserName() return $this- username; public function setUser(CActiveRecord $user) $this- admin=$user- attributes;}

以上就是本文的全部內容,希望對大家的學習有所幫助,更多相關內容請關注PHP !

相關推薦:

關于Yii2中使用join和joinwith進行多表關聯查詢

關于利用Yii2微信后臺開發的解析

以上就是關于Yii中處理前后臺登錄的方法實現的詳細內容,PHP教程

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲国产精品一区二区久| 久久国产加勒比精品无码| 亚洲伊人久久大香线蕉av| 亚洲bt天天射| 亚洲综合中文字幕在线| 国产精品大陆在线观看| 日韩av电影国产| 久久久久国产一区二区三区| 国产精品爽爽ⅴa在线观看| 日韩中文在线观看| 欧美日韩视频在线| 欧洲成人在线视频| www.国产一区| 日韩在线观看免费全集电视剧网站| 日韩精品极品视频免费观看| 久久免费精品视频| 欧美视频国产精品| 日韩国产在线看| 国产做受高潮69| 狠狠干狠狠久久| 亚洲精品一区久久久久久| 日韩精品电影网| 日韩av男人的天堂| 国产成人aa精品一区在线播放| 欧美天天综合色影久久精品| 精品无人国产偷自产在线| 久久噜噜噜精品国产亚洲综合| 国产一区二区三区欧美| 欧美日韩国产在线播放| 亚洲专区国产精品| 欧美午夜丰满在线18影院| 久久久久久久久久久国产| 久久av红桃一区二区小说| 最好看的2019年中文视频| 欧美与黑人午夜性猛交久久久| 欧美男插女视频| 精品国产一区二区三区久久久狼| 久久久爽爽爽美女图片| 97成人精品视频在线观看| 91九色蝌蚪国产| 2019亚洲日韩新视频| 岛国av一区二区在线在线观看| 日韩亚洲欧美中文高清在线| 久久综合伊人77777蜜臀| 亚洲精品999| 精品久久久在线观看| 美女视频黄免费的亚洲男人天堂| 欧美一区二区三区……| 456亚洲影院| 欧美电影在线播放| 国产精品揄拍一区二区| 国产成人精品一区二区在线| 91国内产香蕉| 国产91精品黑色丝袜高跟鞋| 国产精品一区二区三区在线播放| 亚洲天堂av在线播放| 久久精品在线播放| 欧美激情视频免费观看| 黑人极品videos精品欧美裸| 欧美激情按摩在线| 福利一区视频在线观看| 亚洲精品一区久久久久久| 91中文字幕一区| 欧美一区三区三区高中清蜜桃| 亚洲一区二区日本| 久久久久久国产精品久久| 精品久久久久久电影| 亚洲精品免费在线视频| 久久久久久久久久av| 91av福利视频| 国模gogo一区二区大胆私拍| 亚洲人成网在线播放| 成人淫片在线看| 久久久www成人免费精品| 一区二区三区视频免费在线观看| 日韩精品免费看| 国产日韩欧美日韩| 57pao精品| 国产在线999| 亚州欧美日韩中文视频| 中文国产成人精品久久一| 久久精品中文字幕电影| 国产日韩欧美91| 亚洲人成网站免费播放| 亚洲第五色综合网| 国产成人av网址| 国产亚洲成精品久久| 亚洲人高潮女人毛茸茸| 亚洲精品日韩激情在线电影| 欧美日韩成人免费| 日韩av免费在线播放| 亚洲精品久久久一区二区三区| 国产女人18毛片水18精品| 国产这里只有精品| 日韩在线播放av| 欧美亚洲一区在线| 亚洲国产美女精品久久久久∴| 久久韩剧网电视剧| 成人国产精品日本在线| 成人www视频在线观看| 国产裸体写真av一区二区| 精品伊人久久97| 日本欧美在线视频| 欧洲亚洲免费视频| 57pao国产精品一区| 国产伊人精品在线| 日韩性xxxx爱| 欧美在线视频网站| 97人人模人人爽人人喊中文字| 97涩涩爰在线观看亚洲| 欧美亚洲午夜视频在线观看| 欧美激情影音先锋| 国产成人涩涩涩视频在线观看| 日韩欧美国产黄色| 91免费国产网站| 日韩免费av一区二区| 亚洲乱码一区二区| 久久精视频免费在线久久完整在线看| 久久久久久久999精品视频| 欧美裸体视频网站| 亚洲成人在线网| 久久久久国产一区二区三区| 91视频免费在线| 亚洲午夜激情免费视频| 最新国产成人av网站网址麻豆| 欧美日韩精品二区| 黄色91在线观看| 国产美女久久精品| 欧美精品成人91久久久久久久| 欧美亚洲成人xxx| 九九精品视频在线| 精品福利一区二区| 中文字幕亚洲图片| 欧美激情视频在线免费观看 欧美视频免费一| 国产精品一区=区| 38少妇精品导航| 97超级碰在线看视频免费在线看| 在线成人中文字幕| 日韩精品在线观看一区二区| 亚洲乱码一区av黑人高潮| xvideos成人免费中文版| 精品国产一区二区三区久久久狼| 亚洲第一男人天堂| 欧美在线观看日本一区| 97福利一区二区| 久久久中文字幕| 九九热最新视频//这里只有精品| 91视频-88av| 久久69精品久久久久久久电影好| 不用播放器成人网| www.精品av.com| 国产在线精品一区免费香蕉| 5252色成人免费视频| 欧美精品videosex牲欧美| 欧美一级大片视频| 国产午夜精品理论片a级探花| 成人羞羞国产免费| 久久久久久久久久久人体| 中文字幕久久亚洲| 亚洲国产成人在线视频| 91综合免费在线| 中文字幕欧美专区| 国产精品久久久久久久久久东京| 丝袜美腿精品国产二区|