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
[13374] Re:WebSnap Session 써 보신 분 - 자답 - 좀 황당한...
seg [] 1390 읽음    2010-07-29 13:48
정신을 좀 차리고 자세히 살펴보니, 제 PC 에 브라우저를 두 개를 띄워도 SessionID 는 같이 나옵니다. 그렇다면 session hit 와 application hit 가 같이 올라가는 건 당연하겠죠...

근데 황당하다고 하는 건, 하나는 IE, 하나는 Google Chrome 이렇게 띄워보니 session ID 가 양 쪽이 다르고 원한 대로 작동합니다... 즉 session hits 는 각 브라우저 갱신 횟수만큼, application hit 수는 어느 쪽이건 전체 갱신 횟수만큼 올라갑니다. 원래 같은 종류의 브라우저라도 두 개 띄우면 다른 session 으로 잡혀야 하는 것 아닌지?

IE건, Google Chrome 이건 같은  걸 두 개 띄우면 session id 는 같은 걸로 나옵니다.




seg 님이 쓰신 글 :
: 며칠째 이거 갖고 고민을 하는데... 아래는 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 1390 2010/07/29
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.