iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 30
0
Modern Web

ASP.NET MVC網頁程式介紹系列 第 30

[Day 30] 用ASP.NET MVC 做簡單的註冊及登入系統(五) - 登入驗證

今天來探討一下登入驗證的部分,
根據前天的文章,
雖然成功驗證帳號密碼之後,
可以轉頁面到登入後的網頁,
但是其實就算不透過登入頁,
還是可以直接進入網頁,

所以在這裡就是要先做驗證的部分,
一般來說可以透過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天的介紹到這裡告一段落,
謝謝大家的支持與愛護,
下台一鞠躬~

--
小弟不才,
如果有謬誤或是要補充的,
都歡迎一起來討論!


上一篇
[Day 29] 用ASP.NET MVC 做簡單的註冊及登入系統(五) - SQL Injection
系列文
ASP.NET MVC網頁程式介紹30

1 則留言

0
Joejo
iT邦新手 5 級 ‧ 2018-01-09 08:37:45

恭喜~

小魚 iT邦高手 1 級‧ 2018-01-09 11:56:22 檢舉

/images/emoticon/emoticon41.gif

我要留言

立即登入留言