所有的web系統,只要是有使用者登入這一塊有許可權這個的需求的就要處理使用者登入狀態儲存這個問題,如果沒有登入,那麼跳轉到登入頁面讓使用者登入。
在webform中,一般是通過讓頁面繼承system.web.ui.page,重寫它的oninit()方法,在oninit()中判斷session中是否有使用者登入的資訊;頁面也有pageload()方法,但是在頁面的生命週期中,init方法先執行,所以,截獲oninit,重寫父類的init方法最準確;
public class basepage : system.web.ui.page
}}
在mvc中,mvc下可以自定義特性類為控制器或控制器中的action打上[特性],這裡只需要actionfilter過濾器(action方法執行前後執行),微軟已提供好的actionfilterattribute類,他是篩選器特性的基類,也是乙個抽象類,其實這個抽象類實現了iactionfilter和iresultfilter,
iactionfilter介面的定義了兩個方法:
//在執行操作方法後呼叫。
void onactionexecuted(actionexecutedcontext filtercontext);
// 在執行操作方法之前呼叫。
void onactionexecuting(actionexecutingcontext filtercontext);
我們如果也要做驗證控制,那麼我們首先新建乙個自己需求的特性類,讓他繼承actionfilterattribute,並重寫其中的onactionexecuting方法,在其中完成校驗:
比如
public class logincheckfilterattribute : actionfilterattribute
//action方法執行之前執行此方法
public override void onactionexecuting(actionexecutingcontext filtercontext)}}
}
然後在全域性中註冊這個過濾器。
public class filterconfig);}
}
這樣,你就可以在你的controller類中去使用這個filter特性。如果你在你的action前加上了這個過濾器,那麼在執行這個action方法之前會先呼叫特性類中的重寫onactionexecuting方法,這樣使用者在訪問**的時候會首先檢測使用者是否已經登入,如果沒有登入會跳轉到登入頁面。
但是這樣做,你會很費勁,你每個action都要弄一遍。
對於客戶端的發來的請求,響應都由路由交給了controller控制器,同webform方式一樣,也可以採取同樣的方式,讓我們的controller類繼承自system.web.mvc.controller;
system.web.mvc.controller這個類實現了iactionfilter這個介面,那麼我們就可以自己來覆蓋onactionexecuting方法,在這個我們自己定義的controller基類中做好這些登入驗證;
形如**:
這裡要注意的是,這裡不能使用
response.redirect("/login/index");
這種方式來調整到登入頁面。這會導致:
「無法在傳送 http 標頭之後進行重定向。」這種錯誤;
請使用:
filtercontext.result = redirecttoaction("index","login", new );
還有可能會碰到這個問題就是瀏覽器報錯誤:
「此網頁包含重定向迴圈」
這是由於你的疏忽造成的,你想想,當你沒有登入時,檢測到session沒有,為空,所以定向到了登入,登入的action**獲,本應該到登入頁面,但是onactionexecuting要先執行,於是進入死迴圈了。這個死迴圈的解脫也簡單,因為登入頁面根本就不需要驗證登入,所以我們可以建立個新的controller基類,裡面不去覆蓋onactionexecuting方法,不做登入驗證跳轉這個步驟,這樣的話就可以逃出這個死迴圈;這也是符合設計需求的;
MVC中單使用者登入
把下面這段 放在登入使用者驗證以後 使用者登入驗證通過後判斷使用者是否重複登入 初始化當前使用者的 sessionid online useronline 新增驗證特性類,自動讓已經登入的使用者下線 using system.collections namespace system.web.mvc ...
vue使用者登入狀態判斷
之前專案中用來判斷是否登入我寫了多種方案,但是最終只有乙個方案是比較好的,這篇部落格就是分享該方案 先說基本要求 判斷登入方案需要滿足下面幾點 未登入狀態下的重新整理 1.1 在需要登入頁面中重新整理是需要跳轉到登入頁的 1.2 在不需要登入的頁面中重新整理,不需要跳轉 在未登入狀態下,跳轉到需要登...
C MVC 使用者登入狀態判斷
在filters資料夾下新增乙個類authenticationattribute 如下 登入認證特性 public class authenticationattribute actionfilterattribute base onactionexecuting filtercontext 在co...