#ASP.NET Webform介紹Master page 主頁 & Session 簡介 & 登入login驗證 & 隱碼攻擊injection & 工具箱程式碼片段使用
登入有幾千幾百種做法各自有內容
首先/ASPnet/Site1.Master ( 用於等等登入驗證介紹
Master page主頁面 ( 主板頁面
語意標籤 17CSS_Position 排版
引入 Nugget bs4 所有內容頁面都會吃到libray庫效果 排版
###/ASPnet/Site1.Master
Copy <%@ Master Language="C#" AutoEventWireup="true" CodeBehind="Site1.master.cs" Inherits="ASPnet.Site1" %>
<!DOCTYPE html>
<html>
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title></title>
<link href="Content/bootstrap.min.css" rel="stylesheet" />
<asp:ContentPlaceHolder ID="head" runat="server">
</asp:ContentPlaceHolder>
</head>
<body>
<form id="form1" runat="server">
<div class="container">
<div class="row">
<header class="col-md-12">
header
</header>
</div>
<div class="row">
<aside class="col-md-3">
aside
</aside>
<article class="col-md-9">
<asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server">
</asp:ContentPlaceHolder>
</article>
</div>
<div class="row">
<footer class="col-md-12">
footer
</footer>
</div>
</div>
</form>
</body>
</html>
###/ASPnet/41MainPage.aspx
Copy <%@ Page Title="" Language="C#" MasterPageFile="~/Site1.Master" AutoEventWireup="true" CodeBehind="41MainPage.aspx.cs" Inherits="ASPnet._41MainPage" %>
<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">
<h1>MainPage</h1>
</asp:Content>
例子 改 要的 最後憑空寫出來 才算是學會
接著做/ASPnet/42Login.aspx
ASPnet/33Member_Registeration 有做驗證信註冊
雜湊只能單一方向 比對方式 要雜湊完後去比對
首先先刻前端
用webform就要盡量用控制項
不然就要用form 然後用 javascript 寫 post
刻完後就到/ASPnet/42Login.aspx.cs寫後端
引入 using System.Data.SqlClient;using System.Configuration;物件庫
SqlConnection 資料庫連接物件 利用 ConfigurationManager 組態經理物件
SqlCommand 資料庫指令物件 但 基於資安(如下補充)必須使用 資料庫物件方法Parameters.AddWithValue(“@參數代號,資料庫欄位名稱”)
hasbyte ( sqlserver 指令雜湊密碼
SqlDataReader 讀資料庫物件
ExecuteReader() 執行讀資料庫物件
但是就算驗證登入後 只要記得網址 直接 key網址也能進入 那怎辦呢 ?
Session
藉由 Session (狀態保留(暫存包? 生命週期會同網頁/網站/瀏覽器關閉消失
把門票與登入者姓名暫存到這個包裹內轉移到後端
這時Master page主頁面的效益就來了 只要把檢查session寫在主頁 其他頁面就都吃的到不用重複寫
登出時要多寫清空 session
Mvc 也可以用 session 可以穿越很多 controller 但 viewdata viewtemp viewbag 生命週期不一樣 會在特別講一次 ???
以下方式為 主頁面 包含側欄 頁面 排版格式與cs (類似mvclayout) 藉由 登入頁面 進入到 內容頁面
### /ASPnet/Site1.Master
Copy <%@ Master Language="C#" AutoEventWireup="true" CodeBehind="Site1.master.cs" Inherits="ASPnet.Site1" %>
<!DOCTYPE html>
<html>
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title></title>
<link href="Content/bootstrap.min.css" rel="stylesheet" />
<asp:ContentPlaceHolder ID="head" runat="server">
</asp:ContentPlaceHolder>
</head>
<body>
<form id="form1" runat="server">
<div class="container">
<div class="row">
<header class="col-md-12">
header
</header>
</div>
<div class="row">
<aside class="col-md-3">
aside
</aside>
<article class="col-md-9">
<asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server">
</asp:ContentPlaceHolder>
</article>
</div>
<div class="row">
<footer class="col-md-12">
footer
</footer>
</div>
</div>
</form>
</body>
</html>
### /ASPnet/Site1.Master.cs
Copy using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace ASPnet
{
public partial class Site1 : System.Web.UI.MasterPage
{
protected void Page_Load(object sender, EventArgs e)
{
if (Session["id"] == null)
Response.Redirect("42Login.aspx");
}
}
}
### /ASPnet/42Login.aspx
Copy <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="42Login.aspx.cs" Inherits="ASPnet._42Login" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title></title>
<link href="Content/bootstrap.min.css" rel="stylesheet" />
</head>
<body>
<form id="form1" runat="server">
<div class="container">
<div class="form-group">
<label class="col-form-label" for="txtAccount">帳號:</label>
<asp:TextBox ID="txtAccount" runat="server" CssClass="form-control"></asp:TextBox>
</div>
<div class="form-group">
<label class="col-form-label" for="txtPswd">密碼:</label>
<asp:TextBox ID="txtPswd" runat="server" CssClass="form-control" TextMode="Password"></asp:TextBox>
</div>
<asp:Button ID="Button1" runat="server" Text="登入" CssClass="btn btn-primary" OnClick="Button1_Click" />
</div>
</form>
</body>
</html>
### /ASPnet/42Login.aspx.cs
Copy using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.SqlClient;
using System.Configuration;
namespace ASPnet
{
public partial class _42Login : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Button1_Click(object sender, EventArgs e)
{
SqlConnection Conn = new SqlConnection(ConfigurationManager.ConnectionStrings["MySystemConnectionString1"].ConnectionString);
SqlCommand Cmd = new SqlCommand("select * from members where Account=@account and pswd=hashbytes('sha2_256',@pswd)", Conn);
Cmd.Parameters.AddWithValue("@account", txtAccount.Text);
Cmd.Parameters.AddWithValue("@pswd", txtPswd.Text);
SqlDataReader rd;
Conn.Open();
rd = Cmd.ExecuteReader();
if(rd.Read())
{
Session["id"] = rd["Account"];
Session["name"] = rd["Name"];
Response.Redirect("41MainPage.aspx");
}
else
{
Response.Write("<script>alert('帳密錯誤!!')</script>");
}
Conn.Close();
}
}
}
### /ASPnet/41MainPage.aspx
Copy <%@ Page Title="" Language="C#" MasterPageFile="~/Site1.Master" AutoEventWireup="true" CodeBehind="41MainPage.aspx.cs" Inherits="ASPnet._41MainPage" %>
<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">
<h1><asp:Label ID="Label1" runat="server" Text=""></asp:Label>MainPage</h1>
</asp:Content>
### /ASPnet/41MainPage.aspx.cs
Copy using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace ASPnet
{
public partial class _41MainPage : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
Label1.Text = "歡迎"+Session["Name"]+"光臨本站!!";
}
}
}
##題外話: 很多重複的片段程式碼可以往工具箱拉會自動成片段
###補充: 駭客方式(資料隱碼攻擊SQL injection)
可以不知道密碼的狀態下
Select * from xxx where Accaunt =’aaa’ and pswd =’’ or|=|--‘ (--為註解
F F or T
拋例外處理探查資料庫結構
嘗試 vs.tchcvs.tc.edu.tw/plan/index_login.asp
帳號aaaa 密碼‘or’’=’’
#下午九專題報告
其他組功能很齊全 我們組 哈哈哈… 看來這禮拜要多做點 ( 乾脆直接做好
#補充循序圖畫法
資料字典skma ?
循序圖 書的第十一章 351pg
Usecase可以定義系統有甚麼功能
畫完後會
物件互動行為塑模 ( 活動圖 (考試常用 、 (較細膩) 循序圖 (實務上常用
使用者介面塑模
靜態物件資料結構塑模 ( 資料 類別
Opt 不一定從頭到尾 Usecase 對應一張 循序圖
UI循序圖 樣子要去 使用者介面塑模看 ( 施工的人必須要按圖設計 ( 系統分析師畫圖 ( 分層負責
AC ( 沒有介面的應用程式 其實可以把 應用程式的 功能畫出來 但大多都是在畫一張 AC循序圖
建議先將 順序畫完後 再去編 號碼
UI User interface 使用者介面
UX User Experience 使用者經驗
##第一個案例
左邊 右邊 其實就是兩張循序圖
##第二個案例
##第三個 會員註冊 案例 寶寶組
##要知道 確切的流程圖 循序圖名稱 才能切的乾淨
狀態就會把上面生命線改成狀態 在表達狀態變化
##活動圖