더북(TheBook)

11.2.3 마무리

웹 폼에서 데이터베이스가 아닌 페이지와 페이지 간에 데이터를 저장하고 읽어 오는 기능을 다섯 가지 개체를 통해서 살펴보았다. 이러한 개체들을 언제 어떻게 써야 하는지 각각의 기능을 하나씩 사용해보면서 그 의미를 더욱 자세히 알아가기 바란다.

Note Session을 사용해 서버에 일정 시간 동안 글 등록 방지하기


서버에 데이터를 저장하는 Session 개체를 사용하면 일정 시간 동안 글 등록을 방지하는 기능을 간단히 구현할 수 있다. 다음과 같이 FrmButtonClickOnce.aspx 페이지가 있다고 가정하자. 일반적으로 웹 페이지에서 버튼을 클릭하면 클릭 이벤트가 발생한다. 이때 저장 버튼을 연속으로 클릭하면 그때마다 클릭 이벤트가 발생한다. 예를 들어 게시판에서 저장 버튼을 연달아 클릭하면 데이터가 중복되어 저장될 수 있다. 이러한 중복 저장을 방지하는 코드는 여러 가지가 있는데 이번 장에서 다룬 세션 개체를 사용하면 비교적 쉽게 구현할 수 있다.

▼  FrmButtonClickOnce.aspx

<%@ Page Language="C#" AutoEventWireup="true"
  CodeBehind="FrmButtonClickOnce.aspx.cs"
  Inherits="DevStateManagement.FrmButtonClickOnce" %>

<!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>
</head>
<body>
  <form id="form1" runat="server">
      <div>
          <asp:TextBox ID="txtInput" runat="server"></asp:TextBox>
          <asp:Button ID="btnSave" runat="server" Text="저장"
              OnClick="btnSave_Click" />
          <asp:Label ID="lblDisplay" runat="server"></asp:Label>
      </div>
  </form>
</body>
</html>

 

코드 숨김 파일에서 버튼 클릭에 대한 이벤트 처리기를 작성한다. 현재 버튼이 클릭되는 순간에 현재 시간을 Session 개체에 저장한다. 만약, 기존에 저장된 Session 개체가 있다면, 현재 시간과 비교해서 5초 안에 다시 버튼을 클릭했다면, "잠시 대기할게요^^" 메시지가 출력되도록 해 5초 안에는 딱 한 번만 버튼 클릭에 대한 로직을 처리할 수 있게 한다.

▼  FrmButtonClickOnce.aspx.cs

using System;

namespace DevStateManagement
{
  public partial class FrmButtonClickOnce : System.Web.UI.Page
  {
      protected void Page_Load(object sender, EventArgs e)
      {
      
      }
      
      protected void btnSave_Click(object sender, EventArgs e)
      {
          if (Session["ClickTime"] != null)
          {
              DateTime originDate = Convert.ToDateTime(Session["ClickTime"]);
              
              TimeSpan objTs = DateTime.Now - originDate;
              if (objTs.TotalSeconds < 5) // 5초 동안에 한 번만 저장 가능
              {
                  lblDisplay.Text = "잠시 대기할게요^^";
                  return;
              }
          }
          Session["ClickTime"] = DateTime.Now; // 재 초기화
          lblDisplay.Text = txtInput.Text; // 저장 로직 실행
      }
  }
}

 

다음 그림은 처음 글쓰기한 상태다. 그 다음 그림을 보면 5초 내에 두 번 이상 클릭했을 때 대기 화면을 계속해서 보여준다.

▲ 글쓰기 제한 입력 폼 1

 

▲ 글쓰기 제한 입력 폼 2

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.