많은 개발자들은 웹에 응용 프로그램을 전달하기 전에 상태 개념을 고려하지 않습니다. 앞에서 언급했듯이 웹은 무국적 환경입니다. 따라서 우리는 상태가 무엇인지 논의하고 문제를 피할 수있는 방법을 이해해야합니다.
상태의 정확한 정의
단일 사용자 프로그램에서 vb를 사용하여 .exe 파일을 만들기 위해 실행 가능한 응용 프로그램을 만들 때 전역 (또는 공개) 변수를 선언 한 다음 코드의 어느 곳에서나 액세스 할 수 있습니다. 모멘트 값은 항상 유효하고 응용 프로그램이 실행되는 경우 항상 액세스 할 수 있습니다.
클라이언트 기반 애플리케이션이 서버 기반 데이터베이스 엔진에 액세스하는 시스템과 같은 기존 클라이언트/서버 솔루션의 경우 각 클라이언트는 서버 및 데이터베이스 응용 프로그램에 연결을 설정합니다. 이 연결은 일반적으로 사용자를 확인하여 설정됩니다.
검증 프로세스는 사용자를 식별하는 일반적인 프로세스이며, 이는 사용자 이름과 비밀번호의 조합을 통해 합법적 인 사용자인지 증명합니다.
인증이 발생하면 클라이언트와 서버 기반 애플리케이션간에 연결이 설정되어 사용자가 애플리케이션을 사용한 항상 유효합니다. 이는 사용자가 발효 된 Windows 2000 서버에 등록 할 때 발생합니다. 관리자가 Active Directory 사용자 및 컴퓨터 유틸리티를 사용할 때마다 (시작 메뉴의 관리 도구 옵션에서 디렉토리 관리 항목을 클릭) Active 사용자 연결을 관찰하십시오. 이 프로세스는 Microsoft SQL Server와 같은 많은 시스템에서 동일합니다.
이 영구 연결은 사용자가 서버에 지침 또는 요청을 보내면 서버가 각 사용자를 쉽게 식별 함을 의미합니다. 동일한 서버 응답 또는 다른 사용자 정보를 사용자에게 직접 반환 할 수도 있습니다. 또한 서버는 각 고객과 관련된 가치와 정보를보다 쉽게 저장하고 필요할 때 해당 고객에게 제공 할 수 있습니다. 물론 서버 응용 프로그램에는 사용자가 필요할 때 액세스 할 수있는 주요 글로벌 변수가있을 수 있습니다.
각 클라이언트의 요청을 식별하고 메모리에 관련 사용자의 값을 저장하는이 기능은 상태를 구성합니다. 상태는 사용자의 응용 프로그램의 값, 환경 및 내부 변수를 나타내는 것으로 간주 될 수 있으며 응용 프로그램 및 사용자 연결의 전체 프로세스를 통해 실행됩니다.
상태의 중요성
독립적 인 페이지 만 표시하는 웹 사이트가 아닌 사용자와 상호 작용하는 웹 사이트 기반 응용 프로그램을 만들려면 각 사용자에 대해 별도의 상태를 제공 할 수 있어야합니다. 이것은 단지 그들의 이름을 기억하거나 각 사용자에 대한 객체 참조 또는 다른 레코드 세트를 저장하는 것일 수도 있습니다. 이 작업을 수행 할 수없는 경우 ASP 웹 페이지는 더 이상 수행 할 수 없습니다. 페이지가 실행되면 페이지의 변수 및 기타 관련 정보가 파괴되기 때문입니다. 사용자가 다음 페이지를 요청하면이 페이지에서 제공 한 모든 정보가 손실됩니다.
따라서 각 방문자의 상태를 저장하는 방법을 찾아야합니다. 모든 사용자의 글로벌 값을 저장할 수있는 것이 매우 중요합니다. 예를 들어, 각 사용자에게 자체 카운터를 제공하지 않는 웹 스타일 액세스 또는 페이지 클릭 카운터는 일반적으로 방문한 방문 횟수뿐만 아니라 총 방문자 수를보고 싶어합니다. 방문자 수는 사용자 수준 상태가 아닌 응용 프로그램 수준 상태에 저장해야합니다.
이것은 방금 등장한 문제가 아닙니다. 따라서 웹에 상태를 저장하기위한 전통적인 솔루션이 많이 있습니다. 웹 사이트 관리자는 방문자가 이전에 웹 사이트를 방문했는지 알고 싶어하며, 그렇다면 몇 번이나 방문 했습니까? 또한 다른 웹 사이트를 정기적으로 방문하십시오. 이것은 광고 목표를 설정하는 것이 더 좋을 것입니다. 이 모든 것은 액세스 중 또는 방문하는 동안 사용자가 생성 한 웹 페이지 요청에 대한 정보를 저장하는 방법이 필요합니다.
웹에서 상태를 만듭니다
페이지 요청과 사이트 액세스 사이에 상태를 제공하는 일반적인 방법은 쿠키를 통한 것입니다. 우리는 이전 장에서 해당 값을 클라이언트 컴퓨터에 저장하는 방법을 보았으며,이 쿠키에 유효한 각 페이지 요청과 함께 각 페이지 요청과 함께 전송됩니다. ASP로 쿠키를 확인하고 업데이트함으로써 어느 정도 상태를 유지할 수 있습니다. 포함 된 정보는 사용자를 식별 한 다음 사용자를 저장된 해당 값 세트에 연결하는 데 사용될 수 있습니다.
예를 들어, 사용자 요청에 사이트 지정 쿠키가 포함되어 있는지 여부를 감지 할 수 있습니다. 포함되지 않으면 사용자에게 특정 유형의 ID가 할당되어 숫자를 지정하고 유효 기간이 긴 쿠키에 저장됩니다. 사용자가 앞으로이 사이트를 방문 할 때마다 쿠키를 감지하고 포함 된 정보를 업데이트 할 수 있습니다. 방문 수와 지속 시간에 대한 데이터는 향후 사용하기 위해 서버에 수집 및 저장 될 수 있습니다.
그러나 사용자가 다른 컴퓨터로 전송하거나 쿠키를 삭제하거나 브라우저가 전송 된 쿠키를 받기를 거부하면 어떻게됩니까? 이 경우 상태는 다음 번에 인식되지 않기 때문에 유지 될 수 없으며 웹에는 많은 쿠키가 있습니다. 브라우저에서 쿠키 옵션을 수락하기 전에 경고를 열고 몇 개의 큰 사이트를 돌아 다니면 의미를 이해할 수 있습니다.
1. 익명 방문자 및 공인 방문자
쿠키가 약간 조잡한 솔루션이라고 생각하면보다 간단한 접근 방식을 사용할 수 있습니다. 많은 사이트가 사용하는 한 가지 방법은 방문자가 사이트를 클릭 할 때 또는 신원 확인이 필요한 페이지를 클릭 할 때 로그인 대화 상자를 나타냅니다. 방문자는 먼저 해당 사이트 또는 페이지에 액세스 할 수 있도록 특정 유형의 사용자 이름/비밀번호 조합을 등록하고 얻어야합니다.
방문자가 알려진 합법적 인 사용자임을 증명하기 위해 방문자의 컴퓨터에 배치 된 쿠키는 자세한 등록 데이터를 저장하거나 신원이 확인되었음을 나타내는 키를 저장합니다. 동시에, 방문자의 상세 데이터는 서버에 영구적으로 저장되며 다시 액세스 할 때 사용할 수 있습니다. 방문자가 브라우저에 쿠키가있는 경우 웹 사이트가 확인되었으므로 웹 사이트에 자유롭게 액세스 할 수 있습니다.
쿠키에 유효 기간이 없으면 (만료) 브라우저가 닫히면 쿠키의 값이 자동으로 사라지고 다음 방문에서 다시 등록하고 다시 확인해야합니다. 물론 쿠키를 받거나 쿠키 삭제를 거부하면 등록 대화 상자 만 다시 얻을 수 있습니다. 이런 식으로 인식되지 않으면 사이트에 액세스 할 수 없습니다.
Windows 2000의 전반적인 보안 성능은 자체 네트워크에 등록하는 것과 같이 사용자가 웹 서버에 등록하도록함으로써 IIS에게 더 강력하고 안전한 검증 기능을 제공합니다. 그러나 이것은 Internet Explorer 3.0 이상이있는 브라우저에서만 작동 할 수 있습니다. IIS는 기본 확인을 사용하여 Microsoft가 아닌 브라우저가 웹 서버를 등록 할 수 있습니다.
2. 더 이상 익명 방문자가 없습니다
IIS 웹 서버에서 ASP를 사용하는 경우 사용자가 사이트를 다른 웹 사이트로 떠나거나 브라우저를 닫지 않으면 현재 세션에서 사용자를 추적 할 수 있습니다. 이 장의 뒷부분에서는이 기능이 방문자를 식별하고 사용자의 로컬 정보를 저장하며 상태를 제공하는 데 어떻게 사용되는지 확인합니다. 다음은 이미 논의 된 솔루션에 비해 어떻게 작동하는지에 대한 논의입니다.
ASP와 IIS는 ASP 세션 객체를 통해 상호 작용하는 사용자 세션 개념을 공동으로 제안했습니다. 각 방문자가 서버의 ASP 웹 페이지에 처음 액세스하면 그에 대한 새롭고 독립적 인 세션 객체를 만들고 세션 식별 번호를 세션에 할당 한 다음 특별한 암호화 버전의 세션 식별자를 추가합니다.
쿠키 경로 (쿠키 속성 설명은 이전 장 참조)는 서버에서 실행되는 ASP 응용 프로그램의 루트 경로로 설정됩니다. 이것은 기본 웹 사이트의 루트 디렉토리 (예 : /)에있을 가능성이 있지만 다른 값 일 수도 있습니다 (나중에 참조). 만료 값은 쿠키에 제공되지 않으므로 브라우저가 닫히면 쿠키 값이 사라집니다.
이 사용자 가이 ASP 웹 페이지를 방문 할 때마다 ASP는이 쿠키를 찾습니다. ASPSESSIONIDXXXXXXXXX라는 이름으로 각 X는 알파벳순 문자입니다. 2 장의 그림 2-7에 표시된 ServerVariables 컬렉션에서 HTTP 헤더에서 볼 수 있습니다.
그러나이 쿠키는 request.cookies 또는 response.cookies 컬렉션에 나타나지 않지만 ASP는 숨어 있지만 여전히 브라우저에 저장됩니다. 각 ASP 웹 페이지 요청에 대해 ASP는 값을보아야합니다. 이 쿠키에 포함 된 값은 사용자 세션을 나타냅니다. 따라서 해당 세션 객체의 내용 (메모리에서 처리되었으며 이전 페이지 요청 프로세스에서 작동하는 모든 값을 포함 함)은 ASP 웹 페이지의 스크립트에 양도 될 수 있습니다.
물론 앞에서 언급했듯이 클라이언트 브라우저가 이러한 쿠키를 수신하거나 지원하지 않으면이 처리가 실패합니다. 이 경우 ASP 세션을 만들 수 없고이 방문자의 상태는 자동으로 유지되지 않습니다.