iT邦幫忙

2017 iT 邦幫忙鐵人賽
DAY 28
2
Modern Web

從Asp.Net MVC5的起跑點認識現代網站系列 第 28

Day28_MVC_Filter和Session

  • 分享至 

  • xImage
  •  

Session

Session的設計,是HTTP為stateless的設計,當每一次client在對Server發送request時,前後的要求並不會互相影響,server 並不會紀錄之前的狀態,也因此可以用較少的資源來服務較多的client。
也因此導致Server並不知道Client的狀態(ex.是否登入)。因此,為了讓 server記住client的行為與資料時,就需要 cookiessession的協助。

相對於cookie存在client端,session則是存在server端,server透過傳送存有session idcookie給client,並在server端建立起這個session id的檔案,在之後 client在瀏覽網頁時都會夾帶此session id,如此一來server即可從此session id來辨認每個使用者所儲存的狀態與 data。

透過Session做身分驗證

1.在專案加入「Filter」資料夾,並加入一個class,用來覆寫AuthorizeAttributeOnAuthorization方法達到改變驗證邏輯的需求。
2.繼承AuthorizeAttribute,並加入System.Web.Mvc的參考

using System.Web.Mvc;
    public class AuthorizePlusAttribute : AuthorizeAttribute
    {
        public override void OnAuthorization(AuthorizationContext filterContext)
        {
            if (Convert.ToBoolean(filterContext.HttpContext.Session["auth"]))
            {
                //驗證成功進入
            }
            else
            {
                //驗證失敗回傳HttpError=401
                base.OnAuthorization(filterContext);
            }
        }
    }

3.簡單測試當抓到Session["auth"]==true的驗證
4.HomeController加入三個測試的Action模擬登入登出的結果

        public ActionResult Login()
        {
            Session["auth"] = true;
            return RedirectToAction("Index");            
        }
        
        public ActionResult Logout()
        {
            Session["auth"] = false;
            return RedirectToAction("Index");            
        }
        [AuthorizePlus]
        public ActionResult Success()
        {
            return Content("成功登入");
        }

5.Home/Index的View加入三個button連結此三個Action

    <p>
        <a class="btn btn-default" href="@Url.Action("Success")">
            登入狀況
        </a>
    </p>
    <p>
        <a class="btn btn-default" href="@Url.Action("Login")">
            登入
        </a>
    </p>
    <p>
        <a class="btn btn-default" href="@Url.Action("Logout")">
            登出
        </a>
    </p>

http://ithelp.ithome.com.tw/upload/images/20170111/20103808f1YaTzIQBz.png
6.執行後,直接點「登入狀況」,預設Session["auth"]=false,預設的MVC5專案因為有做登入登出的功能,因此當出現401 Error的狀況時候,預設會導回Login畫面
http://ithelp.ithome.com.tw/upload/images/20170111/20103808XgSCbbphfU.png
7.第二狀況,先點登入,讓Session["auth"]=true,會執行Success的Action。
http://ithelp.ithome.com.tw/upload/images/20170111/20103808n2KeyNt9oM.png


上一篇
Day27_Visual Studio 常用快速鍵
下一篇
Day29_ASP.NET Identity
系列文
從Asp.Net MVC5的起跑點認識現代網站30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言