정신을 좀 차리고 자세히 살펴보니, 제 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 수와 동일하게 나옵니다.
:
: 어떤 이유인지... 아시는 분 설명 부탁드립니다.