'2017/05'에 해당되는 글 4건

Programming/.NET

회원으로 로그인한 사용자에게 비밀번호 변경기능을 제공하는 컨트롤입니다.

 

<asp:ChangePassword ID="ChangePassword1" runat="server"></asp:ChangePassword>

 

당연하겠지만 위 컨트롤을 사용하는 페이지는 로그인사용자만이 볼 수 있는 페이지로 보안이 설정되어야 합니다. 만약 이 설정이 제대로 되지 않아 로그인하지 않은 사용자가 비밀번호를 입력하고 '변경'버튼을 누르게 되면 자동으로 로그인페이지로 이동하게 됩니다.

 

비밀번호 변경시 특정 자리수와 특수문자, 숫자혼합등의 특별한 규칙이 필요한 경우 NewPasswordRegularExpression을 통해 비밀번호에 관한 정규식을 지정할 수 있으며 NewPasswordRegularExpressionErrorMessage 속성으로 정규식에 맞지 않는 비밀번호가 입력되면 관련 오류메세지를 출력할 수 있습니다.

 

참고로 이 컨트롤기능은 Membership 공급자 설정에서 enablePasswordReset 속성이 true여야 실제 사용자 비밀번호 변경이 가능합니다.

 

<membership>

    <providers>

        <clear/>

         <add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider, 

System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" 

connectionStringName="sqlprovider" enablePasswordRetrieval="false" enablePasswordReset="true" 

requiresQuestionAndAnswer="true" applicationName="/" requiresUniqueEmail="false" 

passwordFormat="Hashed" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="7" 

minRequiredNonalphanumericCharacters="1" passwordAttemptWindow="10" 

passwordStrengthRegularExpression=""/>

    </providers>

</membership>

 

'Programming > .NET' 카테고리의 다른 글

[ASP.NET] 웹파트(WebParts)  (0) 2017.06.13
[ASP.NET] 역활(Role)  (0) 2017.06.07
[ASP.NET] ChangePassword  (0) 2017.05.30
[ASP.NET] LoginStatus  (0) 2017.05.23
[ASP.NET] 히스토리(History) 관리  (0) 2017.05.17
[ASP.NET] 추적  (0) 2017.05.09
0 0
Programming/.NET

LoginStatus 컨트롤은 인증되지 않은 사용자에게는 로그인을, 이미 로그인한 인증사용자에게는 로그아웃 기능을 제공하는 컨트롤입니다.

 

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

 

LoginStatus가 존재하는 페이지에 접근하면 'Login'링크가 보일 것입니다. 이 링크를 클릭하면 자동으로 로그인 페이지로 이동합니다.

 

다만 로그인페이지는 존재해야 하며 web.config에 해당 페이지가 설정되어 있어야 합니다. 자세한 내용은 아래 글을 참고해 주십시오.

 

2016/03/21 - [Programming/ASP.NET] - [ASP.NET] 인증(Form)및 로그인(Login)

 

로그인을 하고 나서 같은 페이지에 접근하면 반대로 Logout라는 링크가 보일 것입니다. 이 링크를 클릭하면 로그아웃처리가 완료됩니다. 로그아웃을 위한 별도의 설정은 필요없습니다.

'Programming > .NET' 카테고리의 다른 글

[ASP.NET] 역활(Role)  (0) 2017.06.07
[ASP.NET] ChangePassword  (0) 2017.05.30
[ASP.NET] LoginStatus  (0) 2017.05.23
[ASP.NET] 히스토리(History) 관리  (0) 2017.05.17
[ASP.NET] 추적  (0) 2017.05.09
[Visual Studio] 프로젝트를 네트워크 드라이브에서 열때  (0) 2017.04.25
0 0
Programming/.NET

특정 웹페이지에서 어떤 작업을 처리하는 중에 브라우저의 '뒤로가기'나 '앞으로'를 통해 브라우저를 이동해 버리면 처리결과와는 상관없이 입력내용 일부는 잃어버리게 됩니다. 이런 경우를 대비해 ASP.NET에서는 ScriptManager를 통하여 히스토리를 관리할 수 있는 방법을 제공하고 있습니다.

 

이는 사용자가 다른 페이지로 이동했다가 다시 원래 페이지로 돌아오는 경우 입력값을 복원할 수 있다는 것을 의미합니다.

 

<asp:ScriptManager ID="ScriptManager1" runat="server" EnableHistory="true" 

OnNavigate="ScriptManager1_Navigate"></asp:ScriptManager>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
    <ContentTemplate>
        <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
        <asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" />
    </ContentTemplate>
</asp:UpdatePanel>

 

ScriptManager와 하나의 UpdatePanel, 그리고 안에 TextBox와 Button을 배치하였습니다. 여기서 우선 ScriptManager에 주목해 주세요. EnableHistory속성을 true로 하여 ScriptManager에서 히스토리를 관리하도록 하였고 OnNavigate이벤트를 연결했습니다. OnNavigate이벤트는 사용자가 브라우저에서 '뒤로', '앞으로'를 통해 웹페이지를 탐색하는 경우를 확인하기 위해서입니다.

 

protected void Button1_Click(object sender, EventArgs e)
{
    if (ScriptManager1.IsInAsyncPostBack && !ScriptManager1.IsNavigating)
    {
        TextBox1.Text = DateTime.Now.ToString();
        ScriptManager1.AddHistoryPoint("myHistory", DateTime.Now.ToString());
    }
}

protected void ScriptManager1_Navigate(object sender, HistoryEventArgs e)
{
    TextBox1.Text = e.State["myHistory"];
}

 

TextBox와 Button은 UpdatePanel안에 있으므로 AJAX방식으로 동작하여 TextBox안에 현재시간에 대한 내용을 뿌릴 것입니다.

 

Button의 Click이벤트에서는 ScriptManager에 AddHistoryPoint메소드를 호출하여 사용자가 지정하는 특정 키로 원하는 데이터값을 추가하도록 합니다. 참고로 이 처리는 ScriptManager의 IsInAsyncPostBack속성으로 인해 현재 비동기포스트백처리가 시도되며 IsNavigating으로 페이지가 이동되는 상태가 아닌경우만 진행하도록 합니다.

 

Button을 누른 뒤 페이지에서 '뒤로'버튼을 눌러 이전페이지로 갔다가 다시 현재페이지로 돌아오면 ScriptManager의 Navigate이벤트가 호출되면서 이전에 AddHistoryPoint메소드로 추가했던 데이터값을 가져와 테스트박스에 추가할 것입니다.

0 0
Programming/.NET

웹 애플리케이션의 추적기능은 성능및 디버깅을 위한 용도로 자주 사용됩니다.

 

우선 간단하게 특정 페이지에 대한 추적데이터를 보려면 Page 선언자에 Trace 속성을 true로 설정합니다.

 

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs"

 Inherits="web_form_test.Default" Trace="true" TraceMode="SortByTime" %>

 

TraceMode는 추적정보를 Category순(SortByCategory)으로 보일지 실행시간순(SortByTime)으로 보일지를 지정하는 부분입니다.

 

페이지에 추적기능을 활성화하고나면 추적정보가 페이지에 보이게 되는데 이 추적정보는 오로지 현재 페이지를 출력하는것에만 관련된 정보입니다. 애플리케이션 전체에 대한 추적정보를 담아두려면 Web.config의 <system.web>섹션에서 trace 요소를 추가해야 합니다.

 

<trace enabled="true" pageOutput="true"/>

 

trace 요소에서 pageOutput을 true로 설정하면 페이지에 추적정보를 표시할때 렌더링되는 HTML요소는 모두 제거하고 오로지 추적정보만 표시하게 됩니다.

 

 

 

Request Details

세션및 인코딩 응답정보등을 반환합니다.

Trace Information

페이지 수명주기 동안의 실행시간을 반환합니다.

Control Tree

페이지에서 HTML로 렌더링하는데 사용된 컨트롤들에 크기정보를 반환합니다. 특히 ViewState와 ControlState는 패킷크기와 관련이 있으므로 이를 유심히 살펴봐야 합니다.

Session State

현재 사용자에 대한 세션상태를 표시합니다.

Application State

현재 사용중인 Application개체의 키/값과 타입을 표시합니다.

Request Cookies Collection

페이지 요청에 전달된 쿠키를 표시합니다.

Response Cookies Collection

페이지 반환해 전달된 쿠키를 표시합니다.

Response Headers Collection

페이지의 해더값을 표시합니다.

Form Collection

페이지의 Form데이터에 대한 키와 값을 표시합니다.

Querystring Collection

페이지 호출시 전달된 QueryString의 키와 값을 표시합니다.

Server Variables

웹애플리케이션및 브라우저에 대한 정보를 표시합니다.

 

앞서 Web.config에 trace요소를 추가하여 모든 페이지의 추적정보를 활성화 한다고 했는데 수집된 모든추적 정보를 확인해 보려면

 

http://localhost/rtrace.axd

 

형식으로 axd페이지를 호출합니다. 참고로 axd는 내부 처리기로서 실제 존재하는 페이지가 아닙니다.

 

호출한 페이지를 보시면 웹애플리케이션에 호출된 모든 항목과 결과값을 보여주고 있으며 ViewDetail을 클릭해 위와 같은 상세추적정보를 볼 수도 있습니다.

 

또한 페이지의 오른쪽 상단에는 Remaining: 8 이라는 내용이 보이는데 이것은 앞으로 추적정보를 수집할 요청이 8번 남았음을 의미합니다. 그러니까 남은 8번을 합해 요청이 10번 이루어지면 더이상 추적정보를 저장하지 않습니다.

 

추적정보를 계속 저장하려면 'clear current trace'를 클릭해 현재 저장된 추적정보를 삭제하면 됩니다. 만일 10번 이상에 대한 추적정보를 계속 저장하려면 trace요소의 requestLimit속성을 수정해 원하는 만큼의 저장횟수를 지정하면 됩니다. 다만 이 추적정보는 서버메모리에 저장되므로 이를 감안해 적절한 범위를 지정해야 합니다.(최대치 10,000)

 

만약 전체적인 추적정보가 아닌 최신의 추적정보만을 계속 유지하려면 mostRecent속성을 true로 설정하십시오. 이 속성은 제한된만큼의 추적정보를 저장했다가 초과하는 요청이 발생하면 가장 오래된 추적정보를 버리고 새로운 추적정보를 저장하게 됩니다.

 

이 외에도 직접 추적정보에 대한 내용을 추가하기 위해 Trace객체의 Write메소드를 사용할 수 있습니다.

 

Trace.Write("test");

 

Web.config에서 trace 요소의 writeToDiagnosticsTrace속성에 true를 설정하면 Trace.Write의 모든 메소드 호출은 System.Diagnostics.Trace.Write 메소드에 추적정보를 전달하게 됩니다. 그러면 추적정보와 관련된 다양한 클래스를 활용하여 추적정보를 수집할 수 있습니다.

 

우선 System.Diagnostics.Trace에 전달한 메세지는 TraceListeners개체 통해 일반 파일이나 DB쪽에 따로 저장해 둘 수 있습니다.

 

<system.diagnostics>
  <trace autoflush="true">
    <listeners>
      <add name="myListener" type="System.Diagnostics.TextWriterTraceListener"

 initializeData="C:\data\Log.txt"></add>
    </listeners>
  </trace>
</system.diagnostics>

 

TextWriterTraceListener클래스를 Web.config에 위와 같이 설정하면 C:\data에 Log.txt파일을 생성하여 추적정보를 남길 것입니다. 이 밖에 파일형태로 추적정보를 남기는

 

<system.diagnostics>
  <trace autoflush="true">
    <listeners>
      <add name="myListener" type="System.Diagnostics.XmlWriterTraceListener"

 initializeData="C:\data\Log.xml"></add>
    </listeners>
  </trace>
</system.diagnostics>

 

XmlWriterTraceLister 클래스는 XML형태로 추적정보를 남기며

 

<system.diagnostics>
  <trace autoflush="true">
    <listeners>
      <add name="myListener" type="System.Diagnostics.DelimitedListTraceListener"

 initializeData="C:\data\Log.csv"></add>
    </listeners>
  </trace>
</system.diagnostics>

 

DelimitedListTraceListener는 CSV 형식의 파일로 추적정보를 남깁니다.

 

<system.diagnostics>
  <trace autoflush="true">
    <listeners>
      <add name="myListener" type="System.Diagnostics.EventLogTraceListener"

 initializeData="cliel"></add>
    </listeners>
  </trace>
</system.diagnostics>

 

EventLogTraceListener클래스는 윈도우 이벤트로그에 추적정보를 남기도록 합니다. 다만 이벤트로그에 기록하기 위한 권한처리를 위해서 다음과 같이 레지스트리를 수정해야 합니다.

 

 

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\EventLog\Application 하위에 등록한 cliel이라는 키는 EventLogTraceListener클래스를 설정할때 initializeData에 설정한 값과 동일합니다.

 

이벤트 로그에 등록된 추적정보는 제어판 -> 관리자 도구 -> 이벤트 뷰어에서 볼 수 있습니다.

 

 

 

앞에서 살펴본 추적 출력은 경우에 따라 필요하거나 필요없는경우가 혼재될 수 있습니다. 이럴 때 마다 필요한 개체를 추가하거나 제거하기보다는 '진단 스위치'설정을 통해 추적 출력을 제어하는 것이 훨씬 편리할 것입니다.

 

<switches>
  <add name="switch" value="1"/>
</switches>

 

위 설정을 <system.diagnostics>하위에 추가한 후

 

BooleanSwitch bs = new BooleanSwitch("swich", "error switch");
System.Diagnostics.Trace.WriteIf(bs.Enabled, "error message");

 

BooleanSwitch클래스를 통해 Web.config에 추가한 스위치값을 확인하여 Enabled(1 / true)이면 Trace의 WriteIf메소드로 지정한 내용을 출력하도록 합니다.

 

BooleanSwitch클래스는 설정값이 0이 아니면 True로 간주하지만 TraceSwitch클래스는 0~5까지 값에 따라 Off, Error, Warning, Info, Verbose 단계를 판단합니다.

 

TraceSwitch ts = new TraceSwitch("switch", "level switch");
System.Diagnostics.Trace.WriteIf(ts.TraceInfo, "This is 3.");

 

TraceSwitch클래스의 단계만으로 부족하다면 SourceSwitch클래스를 사용하십시오. EventType개체를 통해 좀더 넓어진 단계를 설정할 수 있습니다.

 

SourceSwitch ss = new SourceSwitch("switch", "Error");
System.Diagnostics.Trace.WriteIf(ss.ShouldTrace(TraceEventType.Error), "This is Error");

 

참고로 switches의 add요소는 필요에 따라 Boolean, Trace, Source용을 따로 생성할 수 있으며 용도에 따라 각 값을 판단하는 클래스를 사용하시면 됩니다.

0 0
1
블로그 이미지

클리엘