iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 6
0
Modern Web

零經驗ASP .NET Core 30 DAY全紀錄系列 第 6

零經驗 .NET Core 30 DAY----- Day6 SESSION&COOKIE觀念及極簡易登入

  • 分享至 

  • xImage
  •  

昨天做完極簡易註冊,那今天來做極簡易登入 READY, GO~/images/emoticon/emoticon08.gif

先來講古一下,其實也沒很古,大概3-4年前有去實習,公司給我第一個任務就是將購物車的session改成寫入資料庫,因為原本的購物車紀錄是使用session,可能大家手機滑一滑,就跑去倒垃圾之類的,原本的session紀錄就空了,經過客戶的申訴,於是公司決定進行改版,那麼,下面來談談session、cookie、cache等觀念。

多個不同請求(Request),並且需要記住或共享同樣的資訊時會用到session、cookie或是cache。

/images/emoticon/emoticon06.gif session cookie cache
存放端 存於SERVER端,SESSONID存於CLIENT端 存於CLIENT端 存於SERVER端
特性 針對每個USER會有一個對應的SESSONID,存取時SERVER會到ID對應的SESSION拿資料。 通常儲存和CLIENT有關的資料,會隨每個REQUEST一起傳送,會影響訪問網站的速度,儲存大小受瀏覽器有不同限制。 所有使用者都可以存取的共用資訊,目的是希望可以減少對資料庫的存取,防止不必要的流量耗損。
用途 可以做到網站的全域變數。 EX:紀錄會員ID、記錄購物車內容等等。 存放與使用者相關的資料。 EX:紀錄表單輸入的內容、瀏覽過的分頁等等。 存放一些所有使用者讀取時皆相同且常使用的資料。EX:網頁圖檔、影片等等。
上次比較GET和POST沒做成表格很後悔,好的筆記就是要簡易明瞭~

.NET Core中session的使用方法

  • 1.設定Startup.cs檔案
    在ConfigureServices中加入
 services.AddSession(options => {  
            options.IdleTimeout = TimeSpan.FromMinutes(1);//可以設定session的時間   
            });  
            services.AddMvc();

在Configure中加入

app.UseSession();
  • 2.新增Session、讀取session寫法
HttpContext.Session.SetString("名稱", 值);
HttpContext.Session.GetString("名稱");

動手實作極簡易登入
.cs檔寫登入

        [HttpPost]public ActionResult Login(IFormCollection post)
        {   
            string UID = post["UID"];
            string PWD = post["PWD"];
            using (var ctx = new ithelp12Context())
            {
            var user = ctx.TableUser.Where(s => s.UName == UID && s.UPwd == PWD).FirstOrDefault();
            if(user != null){
                ViewBag.Check = true;
                HttpContext.Session.SetString("UID",UID);
                ViewBag.UID = UID;
                return View("Views/shome/user_home.cshtml");
            }else{
                ViewBag.Check =false;
                return View("Views/shome/Login.cshtml");}
            }
        }

        public ActionResult user_home(){
            ViewBag.UID = HttpContext.Session.GetString("UID");
            if(ViewBag.UID == null || string.IsNullOrWhiteSpace(ViewBag.UID.ToString())){
                return View("Views/shome/Login.cshtml");
            }else{
                return View();
            }
        }

Login.cshtml

@{
    ViewData["Title"] = "Login Page";
}
@section top{
    <ul class="actions">
    <div>@if(ViewBag.check==false){<p style="color:red;">帳號密碼不正確</p>} 
     <form asp-action="Login" method="post">
        <div class="row">
            ID:
            <div class="col"><input name="UID" class="form-control" style="color:blue;"/></div>
            PWD:
            <div class="col"><input name="PWD" class="form-control" style="color:blue;"/></div>
            <div class="col">
               <li><input value="Send" type="submit"></li>
            </div>
        </div>
    </form>
    </div>
    </ul>
}
@if(ViewBag.check==false){
    <section id="two" class="wrapper style2 special">
        <div class="inner narrow">
            <ul class="actions">
                <li><a class="button special" asp-area="" asp-controller="shome" asp-action="Register">Register</a></li>
            </ul>
        </div>
    </section>
}

User_home.cshtml

    ViewData["Title"] = "user_home";
}
@section top{
    <ul class="actions">
    <div>WELCOME @ViewBag.UID
    </div>
    </ul>
}

來看看成果
輸入錯誤的密碼
https://ithelp.ithome.com.tw/upload/images/20200912/201300305aonKPxucO.png
https://ithelp.ithome.com.tw/upload/images/20200912/201300309v6V4pQgZZ.png
輸入正確的密碼
https://ithelp.ithome.com.tw/upload/images/20200912/20130030Jce6rOVw81.png
https://ithelp.ithome.com.tw/upload/images/20200912/20130030ftcKjbrDqJ.png
如果之後基本功能做完了,再來試試簡單的cookie驗證登入。

DAY6心得:我快撐不住了啊~每天都要有進度真的好苦,但做完也蠻有成就感的啦,來去睡,睡醒要去公司加班,那就明天繼續加油囉。
https://ithelp.ithome.com.tw/upload/images/20200912/20130030uGs421UuMS.png
最後,我還沒有完成,所以想回覆都不能回覆/images/emoticon/emoticon02.gif


上一篇
零經驗 .NET Core 30 DAY----- Day5 GET&POST及EF CORE新增、查詢及修改
下一篇
零經驗 .NET Core 30 DAY----- Day7 功能設計及採用之c#和html方法介紹
系列文
零經驗ASP .NET Core 30 DAY全紀錄30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言