php - TP5的登錄驗(yàn)證問(wèn)題
問(wèn)題描述
應(yīng)該屬于比較菜的一個(gè)問(wèn)題,就是我在處理前后端的時(shí)候,需要判斷是否存在session來(lái)確定用戶(hù)是否登錄。
但是我通過(guò)文檔看到的辦法只能自己在每個(gè)頁(yè)面都引入一次判斷,然后進(jìn)行其他操作,不過(guò)肯定有更簡(jiǎn)單的辦法來(lái)處理這個(gè)事,自己實(shí)在是研究不出來(lái)了,請(qǐng)大神幫忙!
主要就是如何能一次設(shè)置,然后讓制定目錄下的頁(yè)面都判斷是否登錄,從而方便下一步的操作
問(wèn)題解答
回答1:第一種引用訪(fǎng)問(wèn):將所有session判斷驗(yàn)證寫(xiě)在一個(gè)類(lèi)裡面。在每一個(gè)控制器裡創(chuàng)建前置控制器方法或者初始化控制,在方法裡面直接引用session類(lèi)的登錄驗(yàn)證方法。第二種繼承:就是每個(gè)控制器都繼承session驗(yàn)證類(lèi),這樣每次訪(fǎng)問(wèn)控制器都繼承session所有類(lèi)與方法,在session類(lèi)設(shè)置初始化控制,作為session的登錄驗(yàn)證
個(gè)人推薦第二種,因?yàn)椴恍枰诿總€(gè)控制器裡面初始化控制器,減少代碼便於維護(hù)
回答2:寫(xiě)一個(gè)基類(lèi)如Base.php,通過(guò)其_initialize來(lái)實(shí)現(xiàn),如:
<?phpnamespace appadmincontroller;use thinkController;class Base extends Controller{ public function _initialize(){$uid = session(’uid’);if($uid == null){ $this->rediect(’Login/index’,’請(qǐng)先登錄后操作’);} }}
其中Login.php不能繼承Base.php,否則需要另外的特殊判斷,如:
<?phpnamespace appadmincontroller;use thinkController;class Login extends Controller{ public function _initialize(){$uid = session(’uid’);if($uid != null){ $this->rediect(’Index/index’,’已登錄’);} }}回答3:
我也是小白一枚,只是有個(gè)想法,可以在登錄存儲(chǔ)session之后,在后端寫(xiě)一個(gè)判斷session的公共方法,然后在需要目錄下面嗲用這個(gè)方法,這樣就不需要在每個(gè)目錄下面都去判斷了!
只是個(gè)人想法,沒(méi)有實(shí)踐啊!回答4:
寫(xiě)一個(gè)驗(yàn)證中間件(行為),然后在路由里調(diào)用,可以任意指定哪些頁(yè)面需要調(diào)用這個(gè)驗(yàn)證的中間件.
可以看下手冊(cè)里行為那一部分
回答5:不用每個(gè)頁(yè)面引入判斷啊,你把所有的控制器繼承一個(gè)公共的控制器,在公共的控制器寫(xiě)一次session判斷就可以了
相關(guān)文章:
1. 為什么我ping不通我的docker容器呢???2. mysql里的大表用mycat做水平拆分,是不是要先手動(dòng)分好,再配置mycat3. 在windows下安裝docker Toolbox 啟動(dòng)Docker Quickstart Terminal 失敗!4. docker - 各位電腦上有多少個(gè)容器啊?容器一多,自己都搞混了,咋辦呢?5. html5 - H5中播放的視頻如何有效的進(jìn)行知識(shí)產(chǎn)權(quán)保護(hù)-防下載防盜鏈6. docker不顯示端口映射呢?7. docker images顯示的鏡像過(guò)多,狗眼被亮瞎了,怎么辦?8. debian - docker依賴(lài)的aufs-tools源碼哪里可以找到啊?9. boot2docker無(wú)法啟動(dòng)10. docker內(nèi)創(chuàng)建jenkins訪(fǎng)問(wèn)另一個(gè)容器下的服務(wù)器問(wèn)題
