Web , ,,
ASP 구현
기본 ASP 세션은 세션 데이터를 메모리에만 저장할 수 있습니다. 세션 데이터를 SQL Server에 저장하기 위해 Custom Microsoft® Visual Basic® 6.0 COM 개체는 기본 세션 객체를 사용하는 대신 세션 상태를 관리하기 위해 작성됩니다. 이 COM 객체는 각 웹 요청의 시작 부분에 인스턴스화되고 SQL Server에서 세션 데이터를 다시로드합니다. ASP 스크립트가 완료되면이 객체가 종료되고 세션 상태는 SQL Server로 다시 유지됩니다.
Visual Basic 6 Com 세션 객체의 주요 목적은 Microsoft® 인터넷 정보 서버 내재 객체에 대한 액세스를 제공하는 것입니다. Visual Basic 6.0 COM 세션 객체는 세션 상태를 유지하기 위해 MySession 클래스의 세션 상태를 사용하고 SESTIONSTENCE CLASS OF SESSIONTIPILITY를 사용하여 SQL Server에 세션 데이터를로드하고 저장합니다. MySession 및 SessionPersistence 클래스는 Regasm.exe 유틸리티를 사용하여 COM 객체로 노출됩니다. Regasm.exe 유틸리티는 COM 클라이언트가 프레임 워크 클래스를 소비 할 수있는 유형 라이브러리를 등록하고 만들 수 있습니다.
세션 상태 정보는 객체를 구성하는 동안 다시로드됩니다. 생성자 (class_initialize)는 먼저 애플리케이션 객체에서 세션 쿠키, 세션 타임 아웃 (세션 타임 아웃) 및 데이터베이스 연결 문자열 (SessionDsn)을 검색하고 세션 데이터를 보유 할 클래스 마이 세션 인스턴스를 작성합니다. 그런 다음 생성자는 주어진 쿠키로 SQL Server의 세션 데이터를 다시로드하려고합니다. SQL 서버에 세션 정보가 없거나 세션이 만료 된 경우 새 쿠키가 발행됩니다. SQL Sever가 세션 상태 데이터와 함께 반환되면 세션 상태가 MySession 객체에 저장됩니다.
private sub class_initialize ()
오류가 발생하여 goto errhandler :
const method_name as string = class_initialize
MySessionPersistence = 새로운 세션 파서 스티어를 설정하십시오
myObjectContext 설정 = getObjectContext ()
myssessionid = readsessionid ()
mydsnstring = getConnectionDsn ()
myTimeout = getsessionTimeout ()
myisnewsession = false
initcontents를 호출하십시오
종료 하위
errhandler :
err.raise err.number, method_name & : & err.source, err.description
종료 서브
개인 하위 이니셔티브 ()
오류가 발생하여 goto errhandler :
const method_name as string = initcontents
myssessionid =이면 그때
MyContententity = New MySession을 설정합니다
myssessionid = mysessionpersistence.generatekey
myisnewsession = true
또 다른
myContentSentity =를 설정하십시오
mysessionpersistence.loadsession (myssessionid, mydsnstring, myTimeout)
끝 If
종료 하위
errhandler :
err.raise err.number, method_name & : & err.source, err.description
종료 서브
객체 인스턴스가 스크립트에서 범위를 벗어나면 소멸자 (class_terminate)가 실행됩니다. Destructor는 SessionPersistence.savesession () 메소드를 사용하여 세션 데이터를 지속합니다. 이것이 새로운 세션 인 경우, Destructor는 새 쿠키를 브라우저로 다시 보냅니다.
private sub class_terminate ()
오류가 발생하여 goto errhandler :
const method_name as string = class_terminate
setDataforsessionID를 호출하십시오
종료 하위
errhandler :
err.raise err.number, method_name & : & err.source, err.description
종료 서브
Private Sub SetDataForsessionID ()
오류가 발생하여 goto errhandler :
const method_name as string = setDataforsessionId
mysessionpersistence.savesession (myssessionid,
mydsnstring, mycontententity, myisnewsession)
MyIsNewSession이면 Call WritesSessionID (MySessionID)
MyContententity = Nothing을 설정하십시오
myObjectContext = Nothing을 설정하십시오
mysessionpersistence = 아무것도 설정하지 않습니다
종료 하위
errhandler :
err.raise err.number, method_name & : & err.source, err.description
종료 서브
기사 상단의 링크를 클릭하여 ASP.NET SessionTility Project, COM 세션 관리자 및 데모 코드의 소스 코드를 다운로드 할 수 있습니다.
데모 프로그램
데모 프로그램은 숫자를 증가시키고 표시하도록 설계되었습니다. 로드 된 페이지에 관계없이 숫자 값이 SQL Server에 저장되고 Classic ASP와 ASP.NET간에 공유되므로 숫자는 계속 증가합니다.
데모 프로그램을 설정하는 단계
SessionDemoDB라는 새 데이터베이스를 만듭니다.
sessstate 테이블 (osql.exe –e –d sessiondemodb –i session.sql)을 만듭니다.
데모라는 새 가상 디렉토리를 만듭니다.
ASP 구성 탭에서 ASP 세션을 끕니다.
web.config, testpage.aspx, global.asa, testpage.asp 및 globalinclude.asp를 가상 디렉토리로 복사하십시오.
Global.asa 및 web.config에서 DSN 문자열 설정을 업데이트하십시오. 세션 시간 초과 설정은 선택 사항입니다. 기본값은 20 분입니다.
SessionTitility.dll을 글로벌 어셈블리 캐시에 설치하십시오 (Gacutil /I SessionTilitility.dll).
regasm.exe (regasm.exe sessiontitility.dll /tlb:sessionutility.tlb)를 사용하여 COM 객체로 SessionTitility.dll을 노출하십시오.
SessionManager.dll을 로컬 디렉토리에 복사하고 Regsvr32.exe를 사용하여 등록하십시오 (regsvr32 sessionmanager.dll).
IUSR_ <machine_name> 계정을 부여하여 SessionMgr.dll에 대한 액세스를 읽고 실행하십시오.
데모 프로그램을 실행하는 단계
Microsoft® Internet Explorer를 시작하십시오.
클래식 ASP에 대해 testpage.asp를로드하십시오. 숫자 1은 웹 페이지에 나타납니다.
인터넷 익스플로러의 새로 고침을 클릭하여 페이지를 다시로드하십시오. 숫자가 증가해야합니다.
ASP.NET의 URL을 testpage.aspx로 변경하십시오. 숫자는 계속 증가해야합니다.
TestPage.aspx 페이지를 먼저 시작하여 동일한 프로세스를 반복 할 수 있습니다.
기존 ASP 응용 프로그램에 COM 객체를 통합합니다
ASP 응용 프로그램을 개발하는 일반적인 관행은 각 스크립트의 시작 부분에 파일을 포함하여 공통 코드와 상수를 공유하는 것입니다. 사용자 정의 세션 객체를 통합하는 가장 좋은 방법은 공통 포함 파일에 인스턴스화 코드를 추가하는 것입니다. 마지막 단계는 단순히 세션 객체에 대한 모든 참조를 사용자 정의 세션 변수 이름으로 바꾸는 것입니다.
제한/개선
이 솔루션은 세션 객체에 COM 객체를 저장하는 기존 ASP 응용 프로그램을 지원하지 않습니다. 이 경우 사용자 정의 세션 객체를 사용하기 위해 상태를 직렬화/사제 화하려면 사용자 정의 마샬러가 필요합니다. 또한이 솔루션은 문자열의 유형 배열 저장을 지원하지 않습니다. 약간의 추가 노력으로 Microsoft® Visual Basic® 6.0 Join 기능을 사용하여 모든 배열 요소를 단일 문자열로 결합하여 세션 객체에 저장하면이 기능을 구현할 수 있습니다. 리버스는 시각적 기본 6.0 분할 기능을 사용하여 문자열을 개별 배열 요소로 다시 분할 할 수 있습니다. .NET 프레임 워크 측면에서 조인 및 분할 메소드는 문자열 클래스의 구성원입니다.
결론
ASP.NET은 새로운 프로그래밍 패러다임 및 아키텍처를 나타내며 클래식 ASP보다 많은 이점을 제공합니다. ASP에서 ASP.NET으로의 포팅은 간단한 프로세스는 아니지만 ASP.NET의 더 나은 프로그래밍 모델과 개선 된 성능은 변환 프로세스를 가치있게 만듭니다. 세션 객체에 COM 객체를 저장하는 것을 제외 하고이 기사에 설명 된 접근 방식은 마이그레이션 프로세스를 더 간단하게 만드는 솔루션을 제공합니다.
저자에 대해
Billy Yuen은 Microsoft Technology Center Silicon Valley에서 북부 캘리포니아에서 일합니다. 이 센터는 Microsoft .NET Framework 솔루션 개발에 중점을 둡니다. 그는 [이메일 보호]에서 연락 할 수 있습니다.