php - TP5的登錄驗證問題
問題描述
應該屬于比較菜的一個問題,就是我在處理前后端的時候,需要判斷是否存在session來確定用戶是否登錄。
但是我通過文檔看到的辦法只能自己在每個頁面都引入一次判斷,然后進行其他操作,不過肯定有更簡單的辦法來處理這個事,自己實在是研究不出來了,請大神幫忙!
主要就是如何能一次設置,然后讓制定目錄下的頁面都判斷是否登錄,從而方便下一步的操作
問題解答
回答1:第一種引用訪問:將所有session判斷驗證寫在一個類裡面。在每一個控制器裡創(chuàng)建前置控制器方法或者初始化控制,在方法裡面直接引用session類的登錄驗證方法。第二種繼承:就是每個控制器都繼承session驗證類,這樣每次訪問控制器都繼承session所有類與方法,在session類設置初始化控制,作為session的登錄驗證
個人推薦第二種,因為不需要在每個控制器裡面初始化控制器,減少代碼便於維護
回答2:寫一個基類如Base.php,通過其_initialize來實現(xiàn),如:
<?phpnamespace appadmincontroller;use thinkController;class Base extends Controller{ public function _initialize(){$uid = session(’uid’);if($uid == null){ $this->rediect(’Login/index’,’請先登錄后操作’);} }}
其中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:
我也是小白一枚,只是有個想法,可以在登錄存儲session之后,在后端寫一個判斷session的公共方法,然后在需要目錄下面嗲用這個方法,這樣就不需要在每個目錄下面都去判斷了!
只是個人想法,沒有實踐啊!回答4:
寫一個驗證中間件(行為),然后在路由里調用,可以任意指定哪些頁面需要調用這個驗證的中間件.
可以看下手冊里行為那一部分
回答5:不用每個頁面引入判斷啊,你把所有的控制器繼承一個公共的控制器,在公共的控制器寫一次session判斷就可以了
相關文章:
1. 數(shù)據(jù)庫 - mysql如何處理數(shù)據(jù)變化中的事務?2. 網(wǎng)絡傳輸協(xié)議 - 以下三種下載方式有什么不同?如何用python模擬下載器下載?3. angular.js - Angular路由和express路由的組合使用問題4. 如何修改phpstudy的phpmyadmin放到其他地方5. 我在centos容器里安裝docker,也就是在容器里安裝容器,報錯了?6. 表單提交驗證,沒反應,求老師指點7. 我的html頁面一提交,網(wǎng)頁便顯示出了我的php代碼,求問是什么原因?8. 在mac下出現(xiàn)了兩個docker環(huán)境9. tp6表單令牌10. javascript - canvas 可以實現(xiàn) PS 魔法橡皮擦的功能嗎?
