Delphi Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
델파이 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
FreePascal/Lazarus
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
델마당
볼랜드포럼 광고 모집

델파이 Q&A
Delphi Programming Q&A
[13369] WebSnap Session 써 보신 분
seg [] 1343 읽음    2010-07-29 00:22
며칠째 이거 갖고 고민을 하는데... 아래는 Marco Cantu 의 소스를 그대로 쓴 것입니다. 이해가 안 가는 부분이 있어서.. 

html 파일의 핵심적 부분은 아래입니다.


<#STYLES><#WARNINGS><#SERVERSCRIPT>



Plain Tags


Session id: <#SessionID>
Session hits: <#SessionHits>

                  // 여기서 session hit 수를 보여 줍니다.

Script


Session hits (via application): <%= Application.SessionHits.Value %> // sessionhit 가 또 나오는데...
Application hits: <%= Application.Hits.Value %>

             // 여기는 application 전체 hit 수를 보여줍니다.


// 위에서 sessionhit 가 두 번 나오는데, 서버와 클라이언트 script 두 가지 다 보여주기 위한 것일 뿐
// 다른 의미는 전혀 없습니다.

==========  homepage_dm.pas 의 핵심 부분은 아래입니다.
  TSessionDemo = class(TWebAppPageModule)

  private
    nHits: Integer;

procedure TSessionDemo.PageProducerHTMLTag(Sender: TObject;
  Tag: TTag; const TagString: String; TagParams: TStrings;
  var ReplaceText: String);
begin
  if TagString = 'SessionID' then
    ReplaceText := WebContext.Session.SessionID
  else if TagString = 'SessionHits' then
    ReplaceText := WebContext.Session.Values ['SessionHits']
end;

procedure TSessionDemo.WebAppPageModuleBeforeDispatchPage(
  Sender: TObject; const PageName: String; var Handled: Boolean);
begin
  // increase application and session hits
  Inc (nHits);                                                      //여기 Hits 는 위의 Private 영역에 지정된 변수이고
  WebContext.Session.Values ['SessionHits'] :=   // SessionHits 는 Session 내에 지정된 변수입니다.
    Integer (WebContext.Session.Values ['SessionHits']) + 1;
end;

procedure TSessionDemo.HitsGetValue(Sender: TObject; var Value: Variant);
begin
  Value := nHits;
end;

procedure TSessionDemo.SessionHitsGetValue(Sender: TObject;
  var Value: Variant);
begin
  Value := Integer (WebContext.Session.Values ['SessionHits']);
end;


어쨌건 핵심은, 이러한 웹 응용 프로그램을 만들어서 실행을 합니다. 한 PC 에 브라우저를 두 개 띄우면 됩니다.
그런데, 원래 cantu 코드는 Delphi 의 web app debugger 를 이용하여 실행하게 되어 있습니다. 이렇게 하면,
두 개 브라우저 띄워 보면 session hit 는 자기 브라우저를 다시 갱신하는 횟수만큼 올라가고, 전체 application hit는
양 쪽 모두에서 갱신한 횟수만큼 올라갑니다.

그.런.데.  제가 이걸 ISAPI/NSAPI dll 형식으로 바꾸어 컴파일했습니다. 물론 project 파일만 바꾸고, 웹모듈은 손
대지 않고 그대로 추가했습니다. 그런데 이 형식에서는 session 과 전체 hit 가 구분이 되지 않습니다. 즉 어느 쪽을
갱신해도 양 쪽 모두가 올라갑니다. 즉 session hit 수 역시 항상 전체 app hit 수와 동일하게 나옵니다.

어떤 이유인지... 아시는 분 설명 부탁드립니다.

+ -

관련 글 리스트
13369 WebSnap Session 써 보신 분 seg 1343 2010/07/29
13374     Re:WebSnap Session 써 보신 분 - 자답 - 좀 황당한... seg 1391 2010/07/29
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.