1. WebUser

- Web.config - 폼 인증 방식으로 변경
 

<authentication mode="Forms">

        <forms loginUrl="~/User/Login.aspx"></forms>

</authentication>

 

 



2. DB

       Server : (local)\SQLExpress
       Database : WebUser
       Uid : WebUser
       Pwd : Pa$$w0rd
       Web.config : <connectionString />기록
       Table : Users

--[0] Users 테이블생성

Create Table dbo.Users

(

    UID Int Identity(1, 1) Primary Key Not Null,

    UserID VarChar(25) Not Null,

    [Password] VarChar(20) Not Null

    -- 필요한항목이있으면, 언제든추가

)

Go

 

 

--[1] 입력예시문

Insert Into Users Values('admin', '1234')

Go

 

 

--[1] 입력저장프로시저

Create Proc dbo.WriteUsers

    @UserID VarChar(25),

    @Password VarChar(20)

As

    Insert Into Users Values(@UserID, @Password)

Go

Exec WriteUsers '구하라', '1234'

Go

 

 

--[2] 출력저장프로시저

Create Proc dbo.ListUsers

As

    Select * From Users Order By UID Desc

Go

Exec ListUsers

Go

 

 

--[3] 상세저장프로시저

Create Proc dbo.ViewUsers

    @UID Int

As

    Select * From Users Where UID = @UID

Go

Exec ViewUsers 1

Go

 

 

--[4] 수정저장프로시저

Create Proc dbo.ModifyUsers

    @UserID VarChar(25),

    @Password VarChar(20),

    @UID Int

As

    Update Users Set UserID = @UserID, Password = @Password Where UID = @UID

Go

Exec ModifyUsers '하라', '1111', 2

Go

 

 

--[5] 삭제저장프로시저

Create Proc dbo.DeleteUsers

    @UID Int

As

    Delete From Users Where UID = @UID

Go

Exec DeleteUsers 2

 

 

 

--[6] 검색저장프로시저

Create Proc dbo.SearchUsers

    @SearchText VarChar(100)

As

    Declare @SqlQuery VarChar(300)

    Set @SqlQuery = '

                    Select * From Users Where UserID Like ''%' + @SearchText + '%''

                    '

Exec(@SqlQuery)

Go

 

 

 

3. 웹 폼

         Default.aspx : 메인
         Login.aspx : 로그인
         Register.aspx : 회원가입
         UserInfor.aspx : 회원정보보기 및 수정 그리고 탈퇴 등 기능 : 인증된 사용자만 접근 가능
         Welcome.aspx : 로그인 환영 페이지 : 인증된 사용자만 접근 가능
         ~/Admin/Default.aspx : 관리 사용자만 접근 가능




[User/Default.aspx]의 <div>태그 내에 작성한 코드


<h3>메인</h3>

<asp:LoginView ID="LoginView1" runat="server">

    <AnonymousTemplate>

        <asp:LoginStatus ID="LoginStatus1" runat="server" />

        <asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl="~/User/Register.aspx">회원가입</asp:HyperLink>

    </AnonymousTemplate>

    <LoggedInTemplate>

        <asp:LoginStatus ID="LoginStatus2" runat="server" />

        <asp:HyperLink ID="HyperLink2" runat="server" NavigateUrl="~/User/UserInfor.aspx" >

        <asp:LoginName ID="LoginName1" runat="server" />

        </asp:HyperLink>

    </LoggedInTemplate>

</asp:LoginView>



 


 

-------------------------------------------------------------------------------------


 

[User/Login.aspx]의 <div>태그 내에 작성한 코드 


로그인<br />


아이디 :<asp:Textbox runat="server" ID="txtUserID"></asp:Textbox><br />

암호 :<asp:TextBox runat="server" ID="txtPassword" TextMode="Password"></asp:TextBox><br /><br />

 

<asp:LinkButton Text="로그인" runat="server" ID="btnLogin" onclick="btnLogin_Click"></asp:LinkButton>

 

<asp:requiredfieldvalidator errormessage="아이디를 입력하시오." ControlToValidate="txtUserID" runat="server" Display="None" SetFocusOnError="true"></asp:requiredfieldvalidator>

<asp:RequiredFieldValidator ErrorMessage="암호를 입력하시오." ControlToValidate="txtPassword" runat="server" Display="None" SetFocusOnError="true"></asp:RequiredFieldValidator>

<asp:ValidationSummary runat="server" ShowMessageBox="true" ShowSummary="false" />

 

 






-------------------------------------------------------------------------------------




[User/Login.aspx.cs]에 작성한 코드부분

 

protected void btnLogin_Click(object sender, EventArgs e)

{

    // 아이디와 암호가 맞는 데이터가 있다면

    if (IsCorrectUser(txtUserID.Text, txtPassword.Text))

    {

        //[3] 인증 부여

        FormsAuthentication.RedirectFromLoginPage(txtUserID.Text, false); // 인증가 동시에 팅겨져 나온 페이지로 이동

        //FormsAuthentication.SetAuthCookie(txtUserID.Text, false);   // 인증 쿠키값 부여하고

        //Response.Redirect("Default.aspx"); // 이동

    }

    else

    {

        Page.ClientScript.RegisterStartupScript(this.GetType(), "showMsg", "<script>alert('잘못된 사용자입니다.');</script>");

    }

}


/// <summary>
/// 아이디와 암호가 맞으면 참, 그렇지 않으면 거짓을 반환
/// </summary>

private bool IsCorrectUser(string userId, string password)

{

    bool result = false;

 

    // 커넥션

    SqlConnection con = new SqlConnection();

    con.ConnectionString = WebConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;

    con.Open();

 

    // 커멘드

    SqlCommand cmd = new SqlCommand();

    cmd.Connection = con;

    cmd.CommandText = "Select * From Users Where UserID = @UserID And Password = @Password";

    cmd.CommandType = CommandType.Text;

 

    // 파라미터 추가

    cmd.Parameters.AddWithValue("@UserID", txtUserID.Text);

    cmd.Parameters.AddWithValue("@Password", txtPassword.Text);

 

    // 읽어오기

    SqlDataReader dr = cmd.ExecuteReader();

 

    if (dr.Read())

    {

        result = true; // 아이디와 암호가 맞는 데이터가 있구나...

    }

    dr.Close();

    con.Close();

 

    return result;

}

 

 


-------------------------------------------------------------------------------------




[User/Register.aspx]의 <div>태그 내에 작성한 코드


회원가입
<br />

<br />

아이디 :<asp:TextBox ID="txtUserID" runat="server"></asp:TextBox>

<br />

암호 :<asp:TextBox ID="txtPassword" runat="server" TextMode="Password"></asp:TextBox>

<br />

<br />

<asp:LinkButton ID="btnRegister" runat="server" onclick="btnRegister_Click">회원가입</asp:LinkButton>

 

 






-------------------------------------------------------------------------------------




[User/Register.aspx.cs]에 작성한 코드부분
 

protected void btnRegister_Click(object sender, EventArgs e)

{

    // 커넥션

    SqlConnection con = new SqlConnection();

    con.ConnectionString = WebConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;

 

    // 커멘드

    SqlCommand cmd = new SqlCommand();

    cmd.Connection = con;

    cmd.CommandText = "WriteUsers";

    cmd.CommandType = CommandType.StoredProcedure;

 

    // 파라미터 추가

    cmd.Parameters.AddWithValue("@UserID", txtUserID.Text);

    cmd.Parameters.AddWithValue("@Password", txtPassword.Text);

 

    // 실행

    con.Open();

    cmd.ExecuteNonQuery();

    con.Close();

 

    // 메시지 박스 출력 후 기본 페이지로 이동

    string strJs = "<script>alert('가입완료');location.href='Default.aspx';</script>";

    Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "goDefault", strJs);

}

 



-------------------------------------------------------------------------------------




[User/UserInfor.aspx]의 <div>태그 내에 작성한 코드 및 [User/UserInfor.aspx.cs]에 작성한 코드부분은 여기서는 없다.(아무런 코드도 작성하지 않았다.)





-------------------------------------------------------------------------------------




[User/Welcome.aspx]에 작성한 소스코드


<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Welcome.aspx.cs" Inherits="User_Welcome" %>

 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

 

<html xmlns="http://www.w3.org/1999/xhtml">

<head runat="server">

    <title></title>

</head>

<body>

    <form id="form1" runat="server">

    <div>

   

    <asp:Label ID="lblName" runat="server" Text=""></asp:Label>

    반갑습니다.

   

    </div>

    </form>

</body>

</html>

 


-------------------------------------------------------------------------------------




[User/Welcome.aspx.cs]에 작성한 소스코드


using System;

 

public partial class User_Welcome : System.Web.UI.Page

{

    protected void Page_Load(object sender, EventArgs e)

    {

        //[1] 인증 여부 확인 : 로그인했으면 참, 그렇지 않으면 거짓을 반환

        if (Page.User.Identity.IsAuthenticated)

        {

            //[2] 인증 이름 출력

            lblName.Text = Page.User.Identity.Name; // web.config에 셋팅했기 때문에 if문 안묶어도 됨

        }

        else

        {

            Response.Redirect("Login.aspx"); // 로그인 페이지로 이동

        }

    }

}

 

 


-------------------------------------------------------------------------------------





[Web.config]에 작성한 소스코드


<?xml version="1.0" encoding="utf-8"?>

<configuration>

    <appSettings/>

    <connectionStrings/>

    <system.web>

 

    </system.web>

  <location path="UserInfor.aspx">

    <system.web>

      <!-- 허가 -->

      <authorization>

        <!-- 인증되지 않은 사용자(?)를 거부 -->

        <deny users="?"/>

      </authorization>

    </system.web>

  </location>

  <location path="Welcome.aspx">

    <system.web>

      <!-- 허가 -->

      <authorization>

        <!-- 인증되지 않은 사용자(?)를 거부 -->

        <deny users="?"/>

      </authorization>

    </system.web>

  </location>

</configuration>




-------------------------------------------------------------------------------------




[User/Admin/Web.config]에 작성한 소스코드


<?xml version="1.0" encoding="utf-8"?>

 

<configuration>

    <appSettings/>

    <connectionStrings/>

    <system.web>

      <authorization>

        <!-- Admin 폴더는 박상혁만 접근 가능 -->

        <allow users="박상혁"/>

        <deny users="*"></deny>

      </authorization>

    </system.web>

</configuration>

 



-------------------------------------------------------------------------------------




* 인증 방법 2가지

1.따로따로 파일에 대한 인증
2.폴더 전체에 대한 인증  

폴더 전체에 인증하려면 system.web안에 authrization에 걸고
특정 파일에 인증하려면 location path로 파일 지정
Admin폴더에 특정 사용자만 들어갈 수 있게 하려면
Admin폴더에 새항목 추가 web.config
여기서는 Admin폴더 전체에 대해 인증 걸어야 하기 때문에
system.web안에 authorization에 지정





-------------------------------------------------------------------------------------




4. 주요 명령어

    - 로그인 처리
         System.Web.Security.FormsAuthentication.SetAuthCookie()
         System.Web.Security.FormsAuthentication.RedirectFromLoginPage()
    - 로그인 확인
         Page.User.Identity.IsAuthenticated
    - 로그인 이름
         Page.User.Identity.Name
    - 로그아웃
         FormsAuthentication.Signout()








 

Posted by holland14
: