asp 나 isapi 는 근본적으로 cgi 즉 웹 브로커라고 볼수있슴다.
혼용해서 쓴다고 뭐 잘못될 것은 없지만 모든 것을 다 구현해 내기란 참으로 힘듭니다.
asp 의 Request, Response 객체는 빌더에서는 TWebRequest, TWebResponse 객체로 구현이되는데요
프로퍼티나 메소드도 대충 비스 무리합니다.
그밖의 Server, Session, Application 객체의 프로퍼티나 메소드들은 여기저기 흩어져 있어여.
님께서는 차라리 asp에서 못하는 복잡한 일을 isapi를 통해 하시려는 것 같은데...
isapi 보다는 빌더로 asp 오브젝트(액티브 x 컴포넌트)를 만들어 asp 스크립트를 연동해 쓰시는 것이 훨씬
낫습니다.
아 당근 세션도 쓸수 있구여 컴포넌트 상에서여...
=ㅅ=;; 놈은 주로 웹에서의 비즈니스로직 부분을 그렇게 만들어 asp 와 연결해서 쓰는데 넘 훌륭합니다.
asp 스크립트도 되게 간단하게 되구 코드도 엘레간테하게 되어여...
왠만한 책에선 다 나와 있구여 디벨로퍼 가이드에 조금 소개가 되어 있어여...
만드는것도 아주 재밌습니다 케케케 =ㅅ=;;
참 그리고 쿠키는 아래와 같이 만듭니다,
헐 급하게 로그인 브로커를 만들어 봤는데 소슨 알아서 참고하세요.. =ㅅ=;;
//---------------------------------------------------------------------------
#include "LoginBroker.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TWebpool *Webpool;
//---------------------------------------------------------------------------
__fastcall TWebpool::TWebpool(TComponent* Owner)
: TWebModule(Owner)
{
String CStr = "Provider=SQLOLEDB;Server=NEANT;Database=IconAsp;UID=ebony;PWD=^ㅅ^";
DbConn->ConnectionString = CStr;
}
//---------------------------------------------------------------------------
void __fastcall TWebpool::WebpoolMoiAction(TObject *Sender,
TWebRequest *Request, TWebResponse *Response, bool &Handled)
{
String ID, Pass;
switch ( Mode )
{
case Check :
ID = Request->ContentFields->Values["ID"];
Pass = Request->ContentFields->Values["PASSWORD"];
IdentifyBird(ID, Pass);
if ( Mode == Success )
{
Response->Content = "작은새야, 어서와 편히 쉬어라. 쿠키를 먹어라";
/* 새들을 위해 쿠키를 준비하자.... */
TStringList *Cookies = new TStringList();
Cookies->Add("ID=" + ID);
Cookies->Add("PASSWORD=" + Pass);
/* 이부분에서 쿠키의 특성을 결정한다... */
Response->SetCookieField(Cookies,NULL,NULL,Now()+1,false);
/* 2번째가 쿠키의 도메인 3번째는 쿠키의 패스 작은새가 하루동안 먹을량을 주고
마지막은 https (SSL) 를 통해 새들에게 쿠키를 줄건지 결정함. true 로 햇슬때 못
받아먹는 불쌍한 새들이 있어여... 기본은 false 로 ㅎ해야 아무나 잘 받아먹고
뱉는다 -_-;; */
Cookies->Free();
/* 과자 먹은 새들은 빌더 새가 되어야지~ 비시비디엔에서 놀아라~ =ㅅ=;; */
Response->SendRedirect("
http://www.borlandforum.com/");
}
else
{
Response->Content = "이 나쁜 앙마새야! 쿠키안줘~";
}
/*
Response->Content = "하이, 작은 새야 체크를 해보자!";
*/
break;
case New :
Response->Content = "하이, 작은 새야 새로운 아이디를 주께!";
break;
case Default :
Page->HTMLFile = "C:\\Inetpub\\wwwroot\\AspBroker\\Login.htm";
Response->Content = Page->Content();
break;
}
}
//---------------------------------------------------------------------------
void __fastcall TWebpool::WebModuleBeforeDispatch(TObject *Sender,
TWebRequest *Request, TWebResponse *Response, bool &Handled)
{
if ( Request->CookieFields->Count > 0 )
{
}
if ( Request->ContentFields->Count > 0 )
{
bool check;
check = Request->ContentFields->Values["Login"].IsEmpty() ? false : true;
if ( check )
{
Mode = Check;
return;
}
bool add;
add = Request->ContentFields->Values["New"].IsEmpty() ? false : true;
if ( add )
{
Mode = New;
return;
}
}
Mode = Default;
}
//---------------------------------------------------------------------------
void __fastcall TWebpool::IdentifyBird(String ID, String Pass)
{
Qry->Close();
Qry->SQL->Clear();
Qry->SQL->Add("SELECT USERID, USERPW FROM LOGINUSER ");
Qry->SQL->Add("WHERE USERID = :USERID ");
Qry->Parameters->ParamByName("USERID")->Value = ID;
Qry->Open();
if ( !Qry->Eof )
{
String pass = Qry->FieldByName("USERPW")->AsString;
if ( Pass == pass )
{
Mode = Success;
return;
}
}
Mode = Failure;
}