본문 바로가기

   
Programming/ASP.NET(4.0)

ASP.NET Requst, Response, Application, Session, Server

반응형

ASP.NET Requst, Response, Application, Session, Server

   ASP 5가지 객체

 1. Request(요청)
   a. HttpRequest 클래스
   b. this.Request 프로퍼티

 2. Response(응답)


 3. Application(사이트 전체)

 4. Session(고객) *****


 5. Server(잡다한것들..)


Session : 타이머 20분동안 메모리에 세션 객체를 살려놓는다.

20분동안에 없다면 사이트에 없는것으로 간주.

재요청시 세션객체를 20분 연장~! 계속 리셋되며 연장~!

각사용자별 세션에 객체생성


어플리케이션 시작 시점 : 첫사용자가 들어오는 순간

어플리케이션 종료 시점 : 마지막 사용자가 나가는 순간 세션시간 다찰때 어플리케이션 객체 종료 됨.


Cookie(쿠키)

 - 사이트 방문자에 대한 개별적인 데이터를 사이트 운영중에 유지? 관리

  1. 유지

  2. 개별






using System;

using System.Collections.Generic;

using System.Linq;

using System.Web;

using System.Web.UI;

using System.Web.UI.WebControls;

 

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

{

    protected void Page_Load(object sender, EventArgs e)

    {

             if (!IsPostBack)

             {

                    //현재 페이지를 요청할 당시의 여러가지 정보

                    string txt = "";

 

                    txt += Request.ApplicationPath + "<br />";

                    txt += Request.Browser.Browser + "<br />";

                    txt += Request.ContentLength + "<br />";

                    txt += Request.ContentType + "<br />";

                    txt += Request.CurrentExecutionFilePath + "<br />";

                    txt += Request.FilePath + "<br />";

                    txt += Request.Path + "<br />";

                    txt += Request.PhysicalApplicationPath + "<br />";

                    txt += Request.TotalBytes + "<br />";

                    txt += Request.Url + "<br />";

                    txt += Request.UrlReferrer + "<br />";

                    txt += Request.UserHostAddress + "<br />";

 

                    Label1.Text = txt;

 

                    //현재 페이지가 올바른 접속 경로 통해서 접근 판단?

                    //if (Request.UrlReferrer != null)

                    //{

                    //    if (Request.UrlReferrer.ToString().IndexOf("Ex40_Request.aspx") > -1)

                    //    {

                    //        //이전페이지가 없거나 올바른 경로임

                    //        Label1.Text = "정상적인 처리..";

                    //    }

 

                    //    else

                    //    {

                    //        Label1.Text = "예상치 못한경로 앤드 잘못된 경로 일것임..";

                    //    }

                    //}

                    //else

                    //{

                    //    Label1.Text = "나가십시오...";

                    //}

                   

             }

    }

}

 





aspx

<!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>

    <title></title>

</head>

<body>

       <form method="post" action="Ex41_Ok.aspx">

             데이터 : <input type="text" name="txtData" />

             <br />

             데이터 : <input type="text" name="txtData2" />

             <br />

             <input type="submit" value=" 보내기 " />

       </form>

 

       <br />

 

       <a href="Ex41_Ok.aspx?txtData=test&txtData2=하하하">페이지 이동하기</a>

</body>

</html>

 

 



c#

using System;

using System.Collections.Generic;

using System.Linq;

using System.Web;

using System.Web.UI;

using System.Web.UI.WebControls;

 

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

{

    protected void Page_Load(object sender, EventArgs e)

    {

             //클라이언트 -> 서버

 

             //method

             // 1. get 전송

             //  - Request.QueryString 컬렉션

             // 2. post 전송

             //  - Request.Form 컬렉션

 

             //Request[]

             // - 자동으로 처음엔 QueryString 컬렉션을 뒤져서 나오면 반환, 없으면 Form 컬렉션을 뒤짐.. 있으면 반환 없으면 다음 컬렉션..

 

 

             //Label1.Text = "받은 데이터 : " + Request.QueryString["txtData"];

             //Label1.Text += "<br />받은 데이터 : " + Request.QueryString["txtData2"];

 

             //Label1.Text = "받은 데이터 : " + Request.Form["txtData"];

             //Label1.Text += "<br />받은 데이터 : " + Request.Form["txtData2"];

 

             Label1.Text = "받은 데이터 : " + Request["txtData"];

             Label1.Text += "<br />받은 데이터 : " + Request["txtData2"];

    }

}

 






aspx

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

 

<!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>

   

       <h2>

                    Ex42_Event.aspx</h2>

             <br />

             <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>

             <br />

             <br />

             <asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Button" />

             <br />

             <br />

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

             <br />

             <br />

   

    </div>

    </form>

</body>

</html>

 

 

c#

using System;

using System.Collections.Generic;

using System.Linq;

using System.Web;

using System.Web.UI;

using System.Web.UI.WebControls;

 

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

{

 

       private string data;

 

    protected void Page_Load(object sender, EventArgs e)

    {

             //Request.Form["TextBox1"]

             // - 서버로부터 넘어오는 데이터를 받는 코드 XXX

             // - 이미 넘어온 데이터가 들어있는 컬렉션을 탐색하는 코드 OOO

 

             // - 서버로 넘어온 데이터는 Request로 여러번 엑세스 가능!!

             Label1.Text = Request.Form["TextBox1"];

    }

       protected void Button1_Click(object sender, EventArgs e)

       {

             //2.5 다시 게시된 데이터 처리

             // TextBox1.Text = Request.Form["TextBox1"];

             //Label1.Text = TextBox1.Text;

 

             Label1.Text += Request.Form["TextBox2"];

       }

}






aspx

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

 

<!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>

   

       <h2>

                    Ex43_Response.aspx</h2>

             <h4 style="height: 171px">

                    <br />

                    Response 객체<br />

                    <br />

&nbsp;1. 출력<br />

                    &nbsp;&nbsp;&nbsp; - 임시페이지(출력스트림, 출력버퍼)에 직접 기록<br />

 

                    <!--옛날 방식-->

                    <% Response.Write(DateTime.Now.ToString()); %>

 

                    <br />

                    <br />

&nbsp;2. 페이지 이동<br />

                    &nbsp;&nbsp;&nbsp; - 자바스크립트와 달리 서버 쪽에서 이전 요청에 관련된 자원(페이지객체, 임시페이지..)을 모두 소멸시키고 새로운 페이지로 이동을

                    하는 명령</h4>

             <p style="height: 26px">

                    &nbsp;&nbsp;&nbsp; - 서버쪽에서 페이지를 바꾼다 -&gt; 브라우저는 눈치 못챈다...&nbsp;</p>

             <h4 style="margin-left: 40px">

                    <br />

             </h4>

             <asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Button"

                    Width="78px" />

             <br />

             <br />

             <asp:Button ID="Button2" runat="server" onclick="Button2_Click" Text="Button"

                    Width="75px" />

             <br />

             <br />

             클라이언트가 서버에 요청을 한다면 

             <br />

             Request페이지부터 요청후 페이지 리다이렉트시 자바스크립트로 실행하게 되면 브라우져는 무조건 페이지를 인식한다.<br />

             c#으로 실행시에는 인식하지 못하고 결과 페이지만 브라우져가 인식한다.

             <br />

&nbsp;<br />

   

    </div>

    </form>

</body>

</html>

 

 




c#

 using System;

using System.Collections.Generic;

using System.Linq;

using System.Web;

using System.Web.UI;

using System.Web.UI.WebControls;

 

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

{

    protected void Page_Load(object sender, EventArgs e)

    {

 

    }

       protected void Button1_Click(object sender, EventArgs e)

       {

             //HTTP 출력 스트림

             // -> 임시 페이지

             //Response.Write("안녕하세요");

             //Render

 

             //디버깅

             Response.Write("insert....");

 

             //임시페이지에 저장된 임시값은 저장해놓았다가 return해준다.

             Response.End();//현재까지 임시페이지에 적힌 내용을 모두 클라이언트에게 보낸뒤 페이지 처리를 강제로 종료한다.

             //Execute(break point보다 편하다)

       }

 

       protected override void OnPreRender(EventArgs e)

       {

             //매번일어나는 이벤트 클릭이 일어나든 안일어나든

             base.OnPreRender(e);

             Response.Write("5단계");

       }

 

       protected void Button2_Click(object sender, EventArgs e)

       {

             //웹에서의 페이지 이동

             // 1. HTML -> <a href="url"></a>

             // 2. Javascript -> location.href = "url"

             // 3. ASP.NET -> Response.Redirect("url");

             Response.Redirect("Ex43_Hidden.aspx");

       }

}

 

aspx

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

 

<!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>

 

       <script type="text/javascript">

             //전처리..

             location.href = "Ex43_End.aspx";

       </script>

 

</head>

<body>

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

    <div>

   

    </div>

    </form>

</body>

</html>

 

 

c#

using System;

using System.Collections.Generic;

using System.Linq;

using System.Web;

using System.Web.UI;

using System.Web.UI.WebControls;

 

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

{

    protected void Page_Load(object sender, EventArgs e)

    {

             //전처리..(무언가를 처리하기한 페이지가 사이에 많이 끼어있다.

             //안내메시지 내용

             //Response.Redirect("Ex43_End.aspx");

    }

}

 





aspx

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

 

<!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>

       <style type="text/css">

             .style1

             {

                    color: #FF66CC;

             }

       </style>

</head>

<body>

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

    <div>

   

       Application &amp; session<br />

             <br />

&nbsp;- 사용용도 : 데이터를 저장하는 역할(내부에 컬렉션)<br />

&nbsp;- Application, Session안에 저장된 데이터는 페이지가 이동되어도 살아 있음.(페이지간에 전달 과정없이도 데이터를 인식 가능) -&gt;

             <span class="style1">상태 유지 가능</span><br />

             <br />

             Application<br />

&nbsp;- 페이지객체와는 상관이 없다. 사이트가 살아 있는 동안 서버 메모리가 살아 있다.<br />

&nbsp;- 페이지 객체가 죽어도 Application 객체는 살아 있다.<br />

&nbsp;- 공용 데이터를 관리<br />

&nbsp;- 죽지않는 변수<br />

&nbsp;- 모든 페이지에서 접근 가능한 변수<br />

&nbsp;- 모든 사용자가 접근 가능한 변수<br />

             <br />

             Session<br />

&nbsp;- 개인 데이터를 관리 공간<br />

&nbsp;- 죽지않는 변수<br />

&nbsp;- 모든 페이지에서 접근 가능한 변수<br />

&nbsp;- 개인 사용자만 접근 가능한 변수(다른 사용자의 Session 접근 불가능)<br />

             <br />

             <br />

             <br />

             <asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Button" />

             <br />

             <br />

             <br />

             <br />

             <br />

             <br />

             <br />

             <br />

             <br />

             <br />

             <br />

             <br />

   

    </div>

    </form>

</body>

</html>

 

 


c#

using System;

using System.Collections.Generic;

using System.Linq;

using System.Web;

using System.Web.UI;

using System.Web.UI.WebControls;

 

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

{

       public int num = 100;

 

    protected void Page_Load(object sender, EventArgs e)

    {

 

    }

       protected void Button1_Click(object sender, EventArgs e)

       {

             //이미 Application 에는 배열이 있다.

             int num2 = 200;

             Application["num3"] = 300;//Application 변수

 

             //한페이지 -> 다른페이지로 데이터를 전송

             // "Ex44_Check.aspx?num=100&num2=200"

             Response.Redirect("Ex44_Check.aspx?num=" + num + "&num2=" + num2);

       }

}

 


c#2

using System;

using System.Collections.Generic;

using System.Linq;

using System.Web;

using System.Web.UI;

using System.Web.UI.WebControls;

 

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

{

    protected void Page_Load(object sender, EventArgs e)

    {

             //Ex44_Application.aspx -> Ex44_Check.aspx 이동

             //(num, num2)              -> (num, num2)?

 

             //Label1.Text = 전페이지객체.num;

             //Label1.Text = num2;//지역변수(불가능한 접근)

 

             //전페이지에서 넘어온 값을 접근

             Label1.Text = Request.QueryString["num"] + " : " + Request.QueryString["num2"] + " : " + Application["num3"];

    }

}

 





aspx

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

 

<!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="Label1" runat="server" Text="Label"></asp:Label>

             <br />

             <br />

             <asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Button"

                    Width="89px" />

             <br />

             <br />

             웹브라우져는 프로세스단위였다.<br />

             새로운 프로세스를 만든다.<br />

   

    </div>

    </form>

</body>

</html>

 

 



c#

using System;

using System.Collections.Generic;

using System.Linq;

using System.Web;

using System.Web.UI;

using System.Web.UI.WebControls;

 

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

{

    protected void Page_Load(object sender, EventArgs e)

    {

             //잠그기 - 잠금을 풀기전까지는 이곳에서 .... 뒷사람은 대기

             Application.Lock();

 

             //Application["count"] 에 값이 없다면

             if (Application["count"] == null)

             {

                    Application["count"] = 0; 

             }

             Application["count"] = (int)Application["count"] + 1;

             Label1.Text = Application["count"].ToString();

 

             //풀기

             Application.UnLock();

    }

       protected void Button1_Click(object sender, EventArgs e)

       {

 

       }

}

 





aspx

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

 

<!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>

   

       <h2>

                    Ex46_Session.aspx</h2>

             <br />

             Session 객체<br />

             1. 데이터 저장 용도<br />

             2. 페이지에 상관없이 접근 가능 변수(전역변수)<br />

             3. 오로지 자기만 접근 가능 변수(공용변수X, 개인변수O)<br />

             <br />

             <br />

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

             <br />

             <br />

             <br />

   

    </div>

    </form>

</body>

</html>

 

 



c#

using System;

using System.Collections.Generic;

using System.Linq;

using System.Web;

using System.Web.UI;

using System.Web.UI.WebControls;

 

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

{

    protected void Page_Load(object sender, EventArgs e)

    {

             //Session객체

             // - 이미 개인당(클라이언트, 유저) Session 객체 1개 제공

 

             //세션 변수

             if (Session["name"] != null)

                    Label1.Text = Session["name"].ToString();

             else

                    Label1.Text = "값없음";

 

             Session["name"] = "홍길동";

             Label1.Text = Session["name"].ToString();

    }

}

 






aspx

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

 

<!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>

   

       <h2>

                    Ex47_Count.aspx</h2>

             <br />

             <h2>

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

                    <br />

                    <br />

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

                    <br />

             </h2>

             <br />

   

    </div>

    </form>

</body>

</html>

 

 


c#

using System;

using System.Collections.Generic;

using System.Linq;

using System.Web;

using System.Web.UI;

using System.Web.UI.WebControls;

 

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

{

    protected void Page_Load(object sender, EventArgs e)

    {

             if (!IsPostBack)

             {

                    if (Session["cnt"] == null)

                           Session["cnt"] = 0;

 

                    Session["cnt"] = (int)Session["cnt"] + 1;

 

 

                    Application.Lock();

                    if (Application["cnt"] == null)

                           Application["cnt"] = 0;

 

                    Application["cnt"] = (int)Application["cnt"] + 1;

                    Application.UnLock();

 

                    Label1.Text = Session["cnt"].ToString();

                    Label2.Text = Application["cnt"].ToString();

             }

    }

}

 






aspx

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

 

<!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>

   

       <h2>

                    Ex48_Session.aspx</h2>

             <br />

             <h2>

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

                    <br />

             </h2>

             <br />

             <br />

   

    </div>

    </form>

</body>

</html>

 

 

c#

using System;

using System.Collections.Generic;

using System.Linq;

using System.Web;

using System.Web.UI;

using System.Web.UI.WebControls;

 

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

{

    protected void Page_Load(object sender, EventArgs e)

    {

             //24자리 임의의 수 = (26+10)^24

             //mmes4iqqykli4nm1iqgmjxp1

             // - 임시 ID

             //사용자를 구분하기위한 세션 값

             Label1.Text = Session.SessionID;

 

             Session.Timeout = 1;

 

             if (Session["num"] == null)

                    Session["num"] = 100;

             else

                    Session["num"] = (int)Session["num"] + 1;

 

             Label1.Text = Session["num"].ToString();

    }

}

 







aspx

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

 

<!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>

   

       <h2>

                    Ex49_Server.aspx</h2>

             <br />

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

             <br />

             <br />

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

             <br />

             <br />

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

             <br />

             <br />

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

             <br />

   

    </div>

    </form>

</body>

</html>

 



 

c#

using System;

using System.Collections.Generic;

using System.Linq;

using System.Web;

using System.Web.UI;

using System.Web.UI.WebControls;

 

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

{

    protected void Page_Load(object sender, EventArgs e)

    {

             //Server 하는 역할

             //1. 가상경로를 로컬(물리)경로로 반환

             string url = "images/angry.png";

             Label1.Text = Server.MapPath(url);

 

 

             //2. 태그 인코딩, 디코딩

             //태그를 데이타로 보고싶을때 필요하다.

             string txt = "<u>홍길동</u>";

             //txt = txt.Replace("<", "&lt;").Replace(">", "&gt;").Replace("\"", "&quot;").Replace("&", "&amp;");

             txt = Server.HtmlEncode(txt);

 

             //3. URL 인코딩, 디코딩

             // - URL 주소에는 사용가능한 문자, 사용 불가능한 문자

             // - & : vpdlwl?zl=rkqt?zl=rkqt?zl=rkqt

             // - %

             // - 공백 사용X, 한글 사용 X

 

             //Ok.aspx?txt=50& 한글 공백 //올바르지않음

             string data = Server.UrlEncode("50&한글 공백"); //사용가능하게 알아서 변환해줌

             string url2 = "Ok.aspx?txt=" + data;

 

             //Label3.Text = url2;

 

             Label3.Text = Server.UrlDecode("50%26%ed%95%9c%ea%b8%80+%ea%b3%b5%eb%b0%b1");

 

 

 

             //환경 변수 제공

             Label4.Text = Request.ServerVariables["SERVER_SOFTWARE"].ToString();

 

 

             //XML

             //-> CDataSection

             txt = Server.HtmlDecode(txt);

             Label2.Text = txt;

    }

}

 






반응형