세션 식별자

Visual Studio 2010

업데이트: 2007년 11월

브라우저 세션은 SessionID 속성에 저장된 고유 식별자를 사용하여 식별됩니다. 세션 ID를 통해 ASP.NET 응용 프로그램에서 특정 브라우저를 웹 서버의 관련 세션 데이터 및 정보와 연결할 수 있습니다. 브라우저와 웹 서버 사이에서 세션 ID 값은 쿠키에 저장되어 전송되거나, 쿠키를 사용하지 않는 세션이 지정된 경우 URL에 포함되어 전송됩니다.

ms178582.alert_caution(ko-kr,VS.100).gif주의:

P:System.Web.SessionState.HttpSessionState.SessionID 값은 쿠키로 전송되든 URL의 일부로 전송되든 항상 일반 텍스트 형식으로 전송됩니다. 따라서 원하지 않는 소스가 SessionID 값을 알아내 이를 서버에 대한 요청에 포함시키는 방법으로 다른 사용자의 세션에 액세스할 수 있게 됩니다. 세션 상태에 개인 정보나 중요한 정보를 저장한 경우에는 SSL을 사용하여 SessionID가 포함된 브라우저와 서버 간의 모든 통신을 암호화하는 것이 좋습니다.

SessionID는 기본적으로 브라우저의 만료되지 않은 세션 쿠키에 저장됩니다. Web.config 파일의 sessionState 섹션에서 cookieless 특성을 true로 설정하여 세션 식별자가 쿠키에 저장되지 않도록 지정할 수 있습니다.

ms178582.alert_note(ko-kr,VS.100).gif참고:

응용 프로그램의 보안을 강화하려면 응용 프로그램에서 Abandon 메서드를 호출해야 할 때 사용자가 응용 프로그램에서 로그아웃할 수 있도록 해야 합니다. 이렇게 하면 원하지 않는 소스에서 URL의 고유 식별자를 알아내고 이를 사용하여 세션에 저장된 개인 사용자 데이터를 검색하게 될 가능성이 줄어듭니다.

ASP.NET에서는 페이지의 URL에 고유 세션 ID를 자동으로 삽입하여 쿠키를 사용하지 않는 세션 상태를 유지합니다. 예를 들어, 다음 URL은 ASP.NET에 의해 고유 세션 ID lit3py55t21z5v55vlm25s55를 포함하도록 수정되었습니다.

http://www.example.com/s(lit3py55t21z5v55vlm25s55)/orderform.aspx

ASP.NET에서는 각 페이지를 브라우저로 보내기 직전에 링크에 세션 ID 값을 포함시키는 방법으로 요청된 모든 페이지에 포함되어 있고 응용 프로그램 상대 경로를 사용하는 링크를 수정합니다. 세션 상태는 사용자가 ASP.NET 응용 프로그램에서 제공하는 링크 경로를 사용하는 동안 계속 유지됩니다. 그러나 클라이언트에서 응용 프로그램이 제공한 URL을 다시 작성하면 ASP.NET에서는 세션 ID를 확인하고 해당 요청을 기존 세션과 연결할 수 없게 되므로 해당 요청을 처리하기 위한 새 세션이 시작됩니다.

세션 ID는 URL에서 응용 프로그램 이름 뒤의 슬래시와 나머지 파일 또는 가상 디렉터리 식별자의 사이에 포함됩니다. 이렇게 하면 ASP.NET에서는 요청에 SessionStateModule을 포함시키기 전에 응용 프로그램 이름을 확인할 수 있습니다.

다음 예제의 Web.config 파일에서는 쿠키를 사용하지 않는 세션 식별자를 사용하도록 ASP.NET 응용 프로그램을 구성합니다.

<configuration>
  <system.web>
    <sessionState cookieless="true"
      regenerateExpiredSessionId="true" />
  </system.web>
</configuration>

만료된 세션 식별자 다시 생성

쿠키를 사용하지 않는 세션에 사용된 세션 ID 값은 기본적으로 재활용됩니다. 즉, 만료된 세션 ID를 사용하여 요청이 만들어지면 해당 요청과 함께 제공된 SessionID를 사용하여 새 세션이 시작됩니다. 이 때문에 쿠키를 사용하지 않는 SessionID가 포함된 링크가 검색 엔진이나 기타 프로그램을 통해 여러 브라우저와 공유되면 세션 데이터가 뜻하지 않게 공유될 수 있습니다. 세션 식별자가 재활용되지 않도록 설정하면 여러 클라이언트에서 세션 데이터를 공유하게 될 가능성을 줄일 수 있습니다. 이를 위해서는 sessionState 구성 요소의 regenerateExpiredSessionId 특성을 true로 설정합니다. 이렇게 하면 쿠키를 사용하지 않는 세션 요청이 만료된 세션 ID로 만들어질 때 새 세션 ID가 생성됩니다.

ms178582.alert_note(ko-kr,VS.100).gif참고:

만료된 세션 ID로 만든 요청을 HTTP POST 메서드를 사용하여 보내는 경우 regenerateExpiredSessionIdtrue이면 게시된 모든 데이터를 잃게 됩니다. ASP.NET에서는 리디렉션을 수행하여 브라우저 URL에 새 세션 식별자가 있는지 확인하기 때문입니다.

SessionIDManager 클래스를 상속하는 클래스를 만들고 CreateSessionIDValidate 메서드를 고유한 사용자 지정 구현으로 재정의하면 SessionID 값을 제공하고 유효성을 검사하는 사용자 지정 클래스를 구현할 수 있습니다. SessionIDManager 클래스를 재정의하고 해당 메서드를 구현하는 예제를 보려면 CreateSessionID 메서드에 제공된 예제를 참조하십시오.

ISessionIDManager 인터페이스를 구현하는 클래스를 만들면 전체 SessionIDManager를 바꿀 수 있습니다. 예를 들어 ISAPI 필터를 사용하여 HTML 페이지나 이미지 같이 ASP.NET이 아닌 페이지에 고유 식별자를 연결하는 웹 응용 프로그램이 있는 경우, 사용자 지정 SessionIDManager 클래스를 구현하여 이 고유 식별자를 ASP.NET 세션 상태와 함께 사용할 수 있습니다. 사용자 지정 클래스에서 쿠키를 사용하지 않는 세션 식별자를 지원하는 경우 세션 식별자를 URL의 일부로 보내고 가져오기 위한 솔루션을 구현해야 합니다.

표시: