보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

HTML Editor(1) - FreeTextBox

2009. 11. 3. 11:00

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

HTML Editor

2009. 11. 3. 09:15

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.



l  ASP.NET 모듈

 

- 기본형 게시판 : 아무것도 안보고 1~2시간 내에 만들어 내는 능력 키우기

- 자료실 게시판 :

- 답변형 게시판 : Ref, Step, RefOrder 사용 로직

                         태요 닷넷의 계층형 게시판 로직 공부하기

                         http://www.taeyo.net/Columns/List.aspx?SEQ=9&IDX=0

- 완성형 게시판 : 기본 + 자료 + 답변 -> WebDotNetNote

                         게시판 하면 떠오르는 기능들은 대부분 적용

- 멀티형 게시판 : DotNetNote * n 생성

관리자 모드에서 동적으로 생성해 내는 방법

여러개 게시판을 단일 테이블로 구성 : 관리가 편함

게시판 하나의 테이블이 생성 : 일반적으로 성능이 좋음 - DotNetNoteMultiTable2009

- 솔루션형 게시판 : 단일 소스로 SQL Server, Oracle, Access DB 선별적으로 사용

- 게시판 프로젝트 : 특정 사용자/그룹만 접근 가능한 게시판 동적 생성/관리

사용자

역할

게시판

권한

- 개인홈페이지 프로젝트 : 게시판, 공지사항, 자료실, 일정관리, 설문조사, 접속통계, 방명록, 메모장, 블로그, 사진(앨범)....

- 쇼핑몰 프로젝트 :  회원관리, 상품관리, 주문관리

 

 

l       UI  -   ASP.NET, Silverlight, WPF, WIN FORM

       BIZ

       DAC

       DS - 데이터 저장소, 테이블

UI 바뀌고 다른 계층은 그대로 사용

Silverlight  BIZ UI 사이에 서비스 계층인 WS, WCF 와야

 

Posted by holland14
:

 

    ASP.NET 주요 명령어 정리 : 내장 개체

     

  1. Response개체 : 응답(서버(C#)에서 클라이언트(IE))
    • .Write() : 페이지에 문자열 출력
    • .Redirect() : 해당 페이지로 이동
    • .Expires : 현재 페이지의 새로 고침 기능

    Response.Expires = -1; // 응답캐시 지우기

    • .Buffer : 버퍼링 사용 설정

    Response.Buffer = true; // 버퍼링

    • .Flush() : 현재 버퍼 내용 출력
    • .Clear() : 현재 버퍼의 내용 비우기
    • .End() : 현재 페이지 종료…
    • .WriteFile() : 파일 출력
    • .Cookies[] : 쿠키 저장

     

     

     

     

     

  2. Request개체
    • .QueryString[] : 넘겨져 쿼리스트링값을 반환 : key/value쌍으로…

    Get방식 : URI(URL) ? 뒤에 키와 값으로 전달

    • .Form[] : Post방식으로 넘겨져 반환

    Post방식 : HTTP 헤더에 데이터를 실어서 전송

    • .Params[] : Get/Post 방식 아무거나 받음.

    Request[] : Params[] 컬렉션과 동일

     

    • .UserHostAddress : IP주소
    • .ServerVariables["REMOTE_HOST"] : IP주소
    • .ServerVariables["REMOTE_ADDR"] : IP주소

     

    • .Cookies[] : 저장된 쿠키 읽어오기.

     

     

     

     

  3. Server 개체
    • .MapPath(".") : 현재 파일과 같은 경로 반환 : .. , / , \
    • .Execute() : 다른 파일 포함(인클루드) 제어권 돌아옴
    • .Transfer() : 다른 파일 포함(인클루드) 제어권 넘김 : Execute() + Response.End()
    • .UrlPathEncode() : 넘겨져온 쿼리 스트링을 유니코드로 변환(한글 처리)
    • .ScriptTimeout : 서버측에서 현재 ASPX페이지를 몇초간 처리할 건지 설정

    대용량 파일 업로드 페이지는 일시적으로 Server.ScriptTimeout 증가

     

     

     

     

     

  4. Application 개체
    • Application 전역 변수 선언(Public)

    Application["변수명"] = ; // 딱 한 개만 생성

    • .Lock() : 애플리케이션 변수를 잠그는 메서드
    • .UnLock() : 잠긴 애플리케이션 변수를 해체하는 메서드

     

     

  5. Session개체
    • Session 전역 변수 선언(Private)

    Session["변수명"] = ; // 사용자 만큼 생성

    • .Abandon() : 현재 세션 지우기

    예전에는 세션으로 로그인 처리시 로그아웃 사용

    • .SessionID : 현재 세션의 고유번호 반환

    GUID 비슷 : 한명이 접속하면 웹서버는 고유한 인증값을 부여

    • .SessionTimeout : 세션 시간 기록 : 기본값 20분… 추가시키거나 줄일경우 사용...

     

     

     

     

  6. Page 개체
    • .IsPostBack : 현재 페이지가 처음 로드했는지, 다시 게시(PostBack)되었는지 확인

    처음로드 : Page.IsPostBack => false

    다시게시(PostBack) : Page.IsPostBack => true

     

    • .RegisterClientScriptBlock() : 자바스크립트를 동적으로 페이지에 추가 (=> 처음 실행시에는 페이지에 배경 숨김(안보임), 번째 실행시에 배경이 나타나게 .)

    Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "스크립트 구분 이름", "자바스크립트코드");

    • .RegisterStartupScript() : 자바스크립트를 동적으로 페이지에 추가(=> 처음 실행시부터 페이지에 배경 보임)

    Page.ClientScript.RegisterStartupScript(this.GetType(), "스크립트 구분 이름", "자바스크립트코드");

     

     

     

     

     

  7. System.Web.Security.FormsAuthentication 개체
  8.   [1] .SetAuthCookie() : 인증 쿠키값 부여… 인증 처리

    .GetRedirectUrl() : 인증 받기 이전의 페이지 경로값 반환.

      [2] .RedirectFromLoginPage() : 인증처리와 동시에 이전(인증 받기 ) 페이지로 이동

     

      [3] Page.User.Identity.Name : 인증된 사용자명, SetAuthCookie()에서 부여된 인증 쿠키값, Admin, RedPlus

      [4] Page.User.Identity.IsAuthenticated : 인증(로그인처리)되었다면, true, 그렇지 않으면 false 반환

     

     

     

     

     

     

  9. 상태관리
    • 서버에 저장 : 애플리케이션 전체에서 살아있는 변수값 저장
      • Application[] : 1개만
      • Session[] : 여러개
      • Cache[] : 1개만 빠른 메모리에 저장

     

    • 클라이언트에 저장
      • ViewState[] : 브라우저의 소스코드에 히든필드로 저장
      • Response.Cookies[] : 브라우저에 쿠키 저장
      • Request.Cookies[] : 저장된 쿠키 읽어오기

     

     

     

  10. 캐싱
  11. <%@ OutputCache Duration="3600" VaryByParam="None" %>

    --> 3600 동안 현재 페이지를 캐싱(메모리에 처리 결과 담고 바로 출력)

     

     



'.NET프로그래밍 > ASP.NET 3.5 SP1' 카테고리의 다른 글

HTML Editor  (0) 2009.11.03
ASP.NET 모듈  (0) 2009.11.02
웹 파트(WebParts) 컨트롤  (0) 2009.10.28
지역화 (Localization), 전역화 (Glovalization) - 다중 언어 처리  (0) 2009.10.27
지역화 (Localization)  (0) 2009.10.27
Posted by holland14
:

* 웹 파트(WebParts) 컨트롤

 

 

- 특정영역을 최소화, 최대화하기 드래그해서 위치 이동

- 사용자별로 커스터마이즈 할 수 있음

- 페이지의 상단에 WebPartManager를 떨어 뜨려 놓아야 함

- 실행시켜도 보이는 건 없음

 

 

 

- WebPartZone을 각각 영역에 떨어 뜨려 놓는다.

- 하나의 영역

- 항목을 드래그&드롭, 도킹 할 수 있게 함

 

 

 

영역1에는 캘린더(Calendar) 컨트롤

영역2에는 이미지 컨트롤

영역3에는 로그인 컨트롤

 

각 컨트롤들에 Title 속성을 쓸 수 있음 -> 확장 속성

(-> 각 컨트롤의 제목으로 붙어서 나타남)

 

메뉴파트에 디스플레이 선택 할 수 있는 드롭다운리스트 생성

 

카탈로그존 이용해서 복구 가능

(-> 페이지 카탈로그 파트 컨트롤 사용)

 

[Browse] 모드 : 페이지 보기의 기본 화면, 페이지의 웹 파트를 편집하거나 이동 할 수 없다는 의미. 이 보기 모드는 표준적인 페이지 보기에 사용

 

[Edit] 모드 : 페이지의 특정 웹 파트를 선택해서 편집할 수 있도록 설정. [Edit] 모드는 웹 파트의 제목과 색깔, 심지어 우편번호를 직접 입력해서 날씨 정보를 얻어노는 커스텀 속성 설정 등 모든 유형을 편집할 수 있다.

 

[Design] 모드 : 페이지의 구성 요소에 대한 순서를 다시 정렬. [Design] 모드를 설정하면 하나의 존 내부에 있는 항목을 위아래로 이동하거나, 삭제하거나, 페이지의 다른 존으로 이동할 수 있다.

 

[Catalog] 모드 : 페이지의 모든 웹 파트를 보여준다. 또 페이지의 존에 있는 임의의 항목을 선택할 수 있다.

 

 




[Default.aspx]


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

 

<!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 id="Head1" runat="server">

    <title></title>

</head>

<body>

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

    <div>

        <asp:WebPartManager ID="WebPartManager1" runat="server">

        </asp:WebPartManager>

    <table border="1" width="100%">

        <tr>

            <td colspan="3">메뉴&nbsp;&nbsp;

                <asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="true"

                    onselectedindexchanged="DropDownList1_SelectedIndexChanged">

                    <asp:ListItem Value="0">Browse</asp:ListItem>

                    <asp:ListItem Value="1">Design</asp:ListItem>

                    <asp:ListItem Value="2">Catalog</asp:ListItem>

                </asp:DropDownList>

            </td>

        </tr>

        <tr>

            <td>영역1<asp:WebPartZone ID="WebPartZone1" runat="server">

                <ZoneTemplate>

                    <asp:Calendar ID="Calendar1" runat="server" Title="달력"></asp:Calendar>

                </ZoneTemplate>

                </asp:WebPartZone>

                <br /><br /></td>

            <td>영역2<br />

                <asp:WebPartZone ID="WebPartZone2" runat="server">

                    <ZoneTemplate>

                        <asp:Image ID="Image1" runat="server" Title="로고"/>

                    </ZoneTemplate>

                </asp:WebPartZone>

                <br /></td>

            <td>영역3<br />

                <asp:WebPartZone ID="WebPartZone3" runat="server">

                    <ZoneTemplate>

                        <asp:Login ID="Login1" runat="server" Title="로그인">

                        </asp:Login>

                    </ZoneTemplate>

                </asp:WebPartZone>

                <br /></td>

        </tr>

    </table>

    </div>

    <asp:CatalogZone ID="CatalogZone1" runat="server">

        <ZoneTemplate>

            <asp:PageCatalogPart ID="PageCatalogPart1" runat="server" />

        </ZoneTemplate>

    </asp:CatalogZone>

    </form>

</body>

</html>

 





[Default.aspx.cs]


using System;

using System.Web.UI.WebControls.WebParts;

 

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

{

    protected void Page_Load(object sender, EventArgs e)

    {

 

    }

 

    protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)

    {

        if (this.DropDownList1.SelectedValue == "0")

        {

            this.WebPartManager1.DisplayMode = WebPartManager.BrowseDisplayMode;

        }

        else if (this.DropDownList1.SelectedValue == "1")

        {

            this.WebPartManager1.DisplayMode = WebPartManager.DesignDisplayMode;

        }

        else if (this.DropDownList1.SelectedValue == "2")

        {

            this.WebPartManager1.DisplayMode = WebPartManager.CatalogDisplayMode;

        }

    }

}






















Posted by holland14
:

* 한번만 만들어 두고 리소스 파일만 여러개 만들어 놓으면 다중언어처리가 가능하다.


* 동적으로 문화권 변경 가능


// KOREA : ko-KR

        // USA : en-US

        // 태국 : th-TH

 

        //[0] 동적으로 문화권 변경

        //System.Threading.Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");        

 

        //[1] 현재 언어에 따른 정보 읽어오기

        CultureInfo ci = System.Threading.Thread.CurrentThread.CurrentCulture;        

 

        //[2] 문화권 정보 읽어오기

        string s = "";

        s += "문화권 이름 : " + ci.Name + "<br />";

        s += "문화권 표기명 : " + ci.DisplayName + "<br />";

        s += "문화권 영어명 : " + ci.EnglishName + "<br />";

        s += "문화권 본래 이름 : " + ci.NativeName + "<br />";        

 

        //[3] 출력

        Response.Write(s);




 

* 서버 측 문화권 설정

    1. web.config 파일의 <globalization> 요소 단락 정의하기


<!-- 문화권 설정 -->

<globalization culture="en-US" uiCulture="en-US" />

애플리케이션에 적용된 문화권은 미국의 영어이다.


Culture 특성을 사용하면 서버로 들어오는 요청을 처리하는 데 사용하는 문화권을 설정할 수 있다.

uiCulture 특성을 사용하면 애플리케이션의 모든 리소스 파일을 처리하는 데 필요한 기본설정 문화권을 설정할 수 있다.




    2. @Page 지시문으로 페이지 수준에 문화권 설정하기


<%@ Page Language="C#" UICulture="en-US" Culture="en-US" %>

그 문화권 설정을 페이지에 적용한다.



* 클라이언트 측 문화권 설정

 

    브라우저의 인스턴스에서 클라이언트의 선호에 따라 그에 맞는 문화권 설정 가능

    [도구] - [인터넷옵션] - [언어] 버튼

    [추가] 버튼을 눌러서 원하는 문화권 선택, 문화권이 적용되는 순서 지정 가능



 

    1. 사용자가 선택한 문화권에 따라 자동으로 변경하기


<%@ Page Language="C#" culture="auto" uiculture="auto" %>



임의의 구성설정 파일이나 @Page 지시문에서 특정 문화권을 지정하지 않고, 사용자가 페이지를 요청할 때 제공한 문화권을 ASP.NET에서 자동으로 설정.

culture="auto" uiculture="auto"를 삭제하고 global파일에서 en-US로 언어를 지정하면 영어로 웹페이지를 보여준다.

각각의 페이지에 auto속성으로 잡아주면 클라이언트 측(도구-인터넷옵션)을 따라가게 되고 생략하면 web.config 파일의 글로벌라이제이션(globalization)에 정의한 데로 따라간다.





* 지역 리소스 파일 사용하기

 

    페이지 별로 하나씩 만들어 줌.

    해당 페이지를 비주얼 스튜디오에서 열고 비주얼 스튜디오 메뉴에서 [도구] - [로컬 리소스 생성] 선택.

    APP_LocalResources 폴더가 없을 경우 이 폴더를 프로젝트에 생성.

    페이지 지시문에 meta:resourcekey="PageResource1" uiculture="auto" 추가됨.

    ASP.NET 페이지를 기반한 .resx 파일은 App_LocalResouces 폴더에 위치.

    예를 들면 Default.aspx 페이지를 다룬다면 리소스 파일은 Default.aspx.resx로 이름 붙여진다.

    또 다른 언어 리소스 파일 추가하려면 Default.aspx.resx 파일을 복사해서 붙여넣기 한다음, Default.aspx.ru.resx 파일명을 사용한다면 각 서버 컨트롤의 속성 값을 설정해서 러시아어를 사용하는 리소스 파일을 만들 수 있다.

 

 

    - Login.aspx 페이지를 다중 언어로 구현하고 싶을 때...

    기본값은 코드에서 잡아두고 로컬 리소스를 추가해서 값을 변경하면 변경된 값이 웹 브라우저에 보여짐.

    페이지에 메타 특성이 지정되면 리소스 파일의 값을 따라가게 된다.

    리소스 파일을 복사해서 붙여 넣은 다음 이름에 Login.aspx.en.resx 파일명 지정하면 미국 사람이 웹페이지 볼 경우 우선순위가 영어가 높기 때문에 영어로 보여주고 한국인이 웹페이지를 본다면 한국어가 우선순위 높기 때문에 한국어로 웹페이지를 보여주게 된다.





* 전역 리소스 파일 사용하기

 

    여러 페이지에 걸쳐서 사용할 수 있는 전역 리소스 파일 생성.

    여기에 만들어 둔 리소스 키 값은 웹사이트 전체에서 사용 가능.

    프로젝트 우클릭해서 [새 항목 추가]로 리소스 파일을 생성하자.

 

 

- 전역 리소스 파일 가져오는 방법

 

    1. 서버 컨트롤을 선언할 때 값을 직접 조작

 

<asp:Button ID="btnOK2" runat="server" Text="<%$ Resources:Resource, OK %>" />


    
   

    2. 코드 비하인드 페이지에서 설정

    전역 리소스 파일에 설정된 값으로 초기화


btnOK1.Text = Resources.Resource.OK;









Posted by holland14
:


* 지역화(Localization), 전역화(Globalization) : 다중 언어 처리


한번 만들어 두고 다중언어 처리 가능

리소스 파일만 여러개 만들어 놓기

대기업 이상 글로벌 기업 경우 가능

전세계 모든 문화권이 설정되어 있다.

어떤 사이트 만들어 두고 언어권을 구분해 주고 싶을 때

코드 비하인드 페이지에서 동적으로 문화권 변경가능


//[0]
동적으로 문화권 변경

System.Threading.Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");




Web.config파일에 지정 가능

<!-- 문화권 설정 -->

<globalization culture="th-TH" uiCulture="th-TH" />




특정 페이지만 문화권 설정 가능


<%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default" Culture="th-TH" UICulture="th-TH" %>









Posted by holland14
:

 

* SOAP

 

XML 데이터의 전송 규약으로 SOAP(Simple Object Access Protocol)를 채택했다.

SOAP를 사용하면 복잡한 데이터 구조, 이를테면 모든 관계가 포함된 데이터의 테이블인 데이터셋을 외부에 제공할 수 있다.

SOAP은 비교적 단순하면 이해하기 쉽다. XML 웹 서비스는 ASP.NET 처럼 HTTP 상단에서 동작하도록 설계되었다. 그러므로 데이터셋은 동일한 인터넷의 유선(HTTP)으로 전송할 수 있으며 80번 통신 포트가 허용된 방화벽을 무사히 통과할 수 있다.

간단히 말해서 방화벽에 구애받지 않고 통신하고, 플랫폼 독립적인 웹 서비스(Web Service)에서 기본적인 메시지를 전달하는 기본이 되는 프로토콜이다.

 

 

 

 

 

* 로직 구현

 

    - 물리적인 파일이 있어야 함

    [1] 메서드 내에서 직접 구현

    [2] 따로 클래스화 시켜서 호출

    [3] DLL 파일로 만들어서 호출

        GAC DLL 파일 보관 후 호출

==============================================

    - 원격에서 호출

    [4] XML WebService로 만들어서 호출

     .NET Remoting 만들어서 호출

     COM_

     MSMQ

 

 

 

 

 

* XML Web Service

 

    데이터(예를 들면 우편번호)를 각각의 컴퓨터에 넣어두지 않고 한 곳에 넣어두고 호출해서 사용.

    로직 자체를 원격에 두고 사용은 여러군데에서 사용하자 XML 웹 서비스는 전세계 공통 표준 기술.

    닷넷으로만든 것을 웹서비스로 해 두고 다른 진영(예를 들면 자바)에서 가져다 쓸 수 있다.

    예를 들면 날씨, 우편번호, 환율 정보를 한곳에서 가져다 쓴다.

    각각의 클라이언트에는 DB가 없어도 중앙관리를 통해서 이용 가능.

    C#을 모르는 다른 진영에서도 사용 가능.

    JQuery쓸 때도 XML WebService 사용.

    한곳에 로직과 데이터를 보관해두고 분산 시켜 사용.

 

 

 

 

 

* 단계

 

    UI ( 다른 진영에서도 사용 가능)

    XML WebService

    BIZ

    DAC

    데이터 저장소

 

 

 

 

 

* Finding an XML Web Service

 

    1. XML WebService URL 찾기

    2. 구축

    3. 위치시키기

    4. 위스트리스트 찾기

    5. 연결하기

    6. 콜하기

 

 

 

 

 

* DLL 파일 만들기

 

    웹사이트 추가 - 새 프로젝트 - 클래스 라이브러리

    클래스 라이브러리 빌드하면 dll 파일이 생성

    복사해서 붙여 넣기 하거나 참조추가 - 프로젝트 - WebXmlWebServiceDLL선택

 

 

 

 

* 웹 참조 추가

 

    웹서비스 파일 추가 MyWebService.asmx

 




    웹 서비스를 참조추가 : 웹참조 추가



   

    원격이라면 경로를 직접 타이핑




    이 솔루션의 웹서비스 클릭



    MyWebService





* 로직 구현 예제


 

protected void Button1_Click(object sender, EventArgs e)

{

    // 메서드 내에서 직접 구현

    //[1] 2개의 정수를 더해서 그 결과값을 출력

    int a = Convert.ToInt32(TextBox1.Text);

    int b = Convert.ToInt32(TextBox2.Text);

 

    //[2] Process를 직접 코드 내에서 출력

    //int r = a + b; // 코드 내 직접 구현 : 매번 만들어서 사용

    //int r = Sum(a, b); // 메서드화 : 해당 웹 폼내에서 여러번 호출 가능

    //MyMath mm = new MyMath(); // 클래스화 : 한 개 이상의 웹폼에서 메서드 호출 가능

    //int r = mm.Sum(a, b);

    //WebXmlWebServiceDLL.MyMath my = new WebXmlWebServiceDLL.MyMath(); // 컴포넌트 화 : 참조추가

    //int r = my.Sum(a, b);

    localhost.MyWebService mws = new localhost.MyWebService();

    int r = mws.Sum(3, 5); // 웹서비스화 : 원격 호출, 웹 참조 추가

 

    //[3] 결과 출력

    TextBox3.Text = r.ToString();

}

 

/// <summary>

/// 두개의 정수를 더하는 함수(메서드)

/// </summary>

private int Sum(int a, int b)

{

    return (a + b);

}

 



 


 

Posted by holland14
:


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
: