2015-02-02 4 views
0

저는 델파이에서 ISAPI 확장을 작성하고 http 상태 비 저장 문제를 극복 할 방법을 찾고 있습니다. 이러한 작업에 세션을 사용하고 싶지만 ISAPI 모듈에서 세션을 시작할 수있는 방법을 찾을 수 없습니다. 세션은 매우 웹 서버에 따라 다르므로 각각에 대해 다른 방법이 있으며 서버 별 DLL을 통해 이러한 기능에 액세스 할 것으로 추측됩니다. 저는 현재 아파치에 관심이 있지만 IIS에 대한 정보는 대단히 감사하겠습니다.
PHP 소스 코드를 다운로드하여 session.c PHPAPI void php_session_start (void)의 코드가 많이 들어 있지 않지만 세션 코드을 검사했습니다.
ISAPI Delphi 웹 모듈에서 세션을 시작하고 세션 변수를 사용하려면 어떻게해야합니까?델파이로 작성된 ISAPI 모듈에서 세션을 사용하는 방법

+1

"TWebModule"/ "TWebRequest"등을 사용하고 있습니까? 나는 이러한 구성 요소가 그 자체로 세션을 처리 할 정도로 정교하다고 믿지 않습니다. 너 자신을 관리해야 해. 일반적으로 데이터베이스에 저장된 쿠키를 통해. 이 기사를 보십시요 : http://delphi.about.com/library/bluc/text/uc060901a.htm –

+0

나는 참으로. 어쩌면 쿠키와 세션 변수의 차이점을 분명히 이해하지 못할 수도 있습니다. 내 지식으로, 쿠키는 응용 프로그램에서 보내고 클라이언트 브라우저에 저장되는 이름/값 쌍 (다른 정보 중 하나)의 일종입니다. 그들은 덜 안전하고 사용자가이를 비활성화 할 수 있다는 단점이 있습니다. 다른 쪽 세션은 서버에 보관되어 텍스트 파일에서 데이터베이스로 "어딘가에"저장됩니다. 변수의 내용이 인터넷을 통해 여행 할 필요가 없기 때문에 세션이 더 좋아요. 보안 및 속도를 향상 시키십시오. – alvaroc

+0

나는 당신이 제공 한 링크로 내 응용 프로그램을 시작했습니다. 그것은 상태없는 문제에 대한 몇 가지 방법을 언급하지만 세션에 대해서는 언급하지 않았다. – alvaroc

답변

1

IIS를 통한 ISAPI 모듈에 대한 경험이 약간 있습니다. ISAPI 확장은 요청을받은 웹 서버와 데이터를 교환하기위한 프로토콜을 구현하는 DLL에 불과합니다.

IIS가 특정 URL에 대한 요청을 받고 해당 URL을 처리하기 위해 ISAPI 확장을 등록하면 IIS 작업자 프로세스로 해당 DLL이로드됩니다 (메모리에없는 경우). DLL은 작업자 프로세스가 유휴 상태가 아닌 것으로 간주하는 동안 메모리에 유지됩니다. DLL을 언로드 할시기를 제어 할 수 없으므로이를 염두에두고 솔루션을 디자인하십시오.

TWebModule은 요청을 받고 전달할 때 발생하는 이벤트 형태로 많은 ISAPI 세부 사항을 추상화합니다. 그러나 세션 하부 구조가 존재하지 않으므로 혼자서해야합니다.

가장 좋은 방법은 제 생각에는 세션 쿠키를 사용하는 것입니다. 모두가하는 일입니다. 따라서 로그온 프로세스가 끝나면 현재 사용자를 유효한 사용자로 식별 할 수있는 문자열을 생성해야합니다. 물론이 문자열을 암호화하여 Base64로 변환해야하지만, 초기 테스트에서 쿠키를 사용자 이름으로 간단하게 채울 수 있습니다.

그래서, 로그온을 처리 한 후, 당신은 MY_APP_SESSION, 예를 들어, add에라는 새 쿠키 (재산 TWebResponse.Cookies를) TWebModule에서 Response 특성 (TWebResponse)를 사용합니다. 이 쿠키는 세션 데이터 (이 예에서는 사용자 이름)를 전달합니다.

그런 다음 로그온을 수행하는 데 사용 된 브라우저에서 비롯된 다른 요청 (Request 속성, 클래스 TWebRequest으로 나타남)에서 해당 쿠키를 받기 시작하므로 모든 요청에서 다음과 같은 세션 데이터의 유효성을 검사해야합니다. 쿠키 (CookieFields에 있음)가 만료 된 세션이나 가짜 세션을 발견하면 요청 처리를 거부합니다.

사용자가 로그 아웃하면 쿠키 만 제거하면됩니다.

사용자 (이름이 아닌 일종의 ID), 세션이 유효 할 때까지의 날짜 및 시간, 일부 보안 데이터 (때로는 일련의 청구). 이 모든 것을 암호화하고 Base64로 변환해야합니다. 쿠키에 몇 가지 보안 속성을 추가하여 쿠키를 읽을 수 있습니다. 또한 여기서 보안에는 정말로 신뢰할 수있는 HTTPS가 포함되어야합니다. 이것은 웹 애플리케이션의 보안을 강화하는 중요한 순간입니다!

그래서 각 요청에서 가장 먼저 보안을 위해 요청 된 URL을 확인하는 것입니다. URL에 세션이 필요하다고 판단되면 세션 쿠키를 확인하고 Base64를 되 돌리고 해독 한 다음 쿠키 내용을 평가하십시오.모든 것이 정상인 것 같으면 요청이 처리됩니다. 따라서 쿠키가 위장되는 것을 방지하는 것이 사기를 피하는 열쇠입니다.

여러분도 알다시피 좋은 델파이 코드를 작성하는 것이 전부입니다.

도움이 되었기를 바랍니다.

관련 문제