今天來探討一下登入驗證的部分,
根據前天的文章,
雖然成功驗證帳號密碼之後,
可以轉頁面到登入後的網頁,
但是其實就算不透過登入頁,
還是可以直接進入網頁,
所以在這裡就是要先做驗證的部分,
一般來說可以透過Cookie或Session來驗證,
關於Cookie和Session的部分網路上很多文章,
有看到一篇文章可以參考
簡明 COOKIE與 SESSION 的基本原理
一般來說,Cookie是記錄在Client端,Session是記錄在Server端,
Cookie是以明碼記錄的,所以通常記在Cookie的資料會經過加密,而且不會記太重要的資料,Session會比較安全一些。
我們今天要講的認證是通過Session來判斷。
首先在登入成功之後,加入這一句
Session["account"] = account;
這樣子Session就會啟動了,Session預設有效時間是20分鐘,當然這個可以改,然後就可以通過這個變數去判斷
後端接收Post的完整程式碼如下:
[HttpPost]
public ActionResult Login(FormCollection post)
{
string account = post["account"];
string password = post["password"];
//驗證帳號密碼
if(db.CheckUserData(account, password))
{
Session["account"] = account;
Response.Redirect("~/Home/Home");
return new EmptyResult();
}
else
{
ViewBag.Msg = "登入失敗...";
return View();
}
}
目前唯一需要登入驗證的只有/Home/Home.cshtml,所以我們在頁面加上
if(Session["account"] == null || string.IsNullOrWhiteSpace(Session["account"].ToString()))
{
Response.Redirect("~/Home/Login");
}
else
{
account = Session["account"].ToString();
}
如果抓到Session的值就紀錄Session的值,如果沒抓到就轉到登入頁
前端完整程式碼如下
@{
Layout = null;
ViewBag.Title = "Home";
var account = "";
if(Session["account"] == null || string.IsNullOrWhiteSpace(Session["account"].ToString()))
{
Response.Redirect("~/Home/Login");
}
else
{
account = Session["account"].ToString();
}
}
@Styles.Render("~/Content/css")
@Scripts.Render("~/bundles/modernizr")
<h2>歡迎登入: @account</h2>
30天的介紹到這裡告一段落,
謝謝大家的支持與愛護,
下台一鞠躬~
--
小弟不才,
如果有謬誤或是要補充的,
都歡迎一起來討論!