Skip to content
Jeongkyu Shin edited this page Sep 24, 2012 · 1 revision
  • 세션은 HTTP 프로토콜의 특성상 여러번의 접속에 대해 일관된 작업을 보장해주는 서버쪽 개체를 말합니다.

  • 세션은 쿠키의 TSSESSION 이라는 키에 저장된 값을 세션 아이디로 사용하여 구별합니다.

  • 세션은 Sessions 테이블에 하나의 레코드로 생성이 되며 다음과 같은 필드들을 갖습니다.

||id||세션 아이디|| ||address||사용자의 IP 주소, 세션아이디를 확인하기 위한 최소한의 보안장치|| ||userid||로그인 사용자의 경우 해당 Users의 userid, 손님의 경우 NULL, 오픈아이디의 경우 -1|| ||preexistence||사용하지 않습니다|| ||data||직렬화된 세션 개체|| ||server||마지막 요청의 $_SERVER[ 'HTTP_HOST' ]|| ||request||마지막 요청의 $_SERVER[ 'REQUEST_URI' ]|| ||referer||마지막 요청의 $_SERVER[ 'HTTP_REFERER' ]|| ||timer||마지막 요청이 시작하고 끝날때까지 경과한 시간 (단위:초)|| ||created||생성된 시각|| ||updated||마지막 방문시각||

  1. 최초 접속시, TSSESSION 값이 비어 있으므로, 하나의 손님 세션(Anonymous Session)이 만들어집니다.
  2. 만약, 사용자의 IP 주소로 할당된 손님 세션 아이디가 존재하면 만들지 않고 그 아이디를 재사용합니다. 즉, TSSESSION이 없을지라도, 같은 세션을 유지하게 됩니다.
    • 이런 이유로, 다른 브라우져라할지라도 손님세션의 경우 공유하게 됩니다.
    • 그러나, 같은 IP를 공유하는 공유기 안에서는 손님세션의 경우 데이터 교환이 생길 수 있는 문제점이 존재합니다.
    • 로봇의 경우 해당 사이트마다 하나의 세션을 만들므로, 쿠키를 사용하지 않는 로봇이라도, 여러 요청을 하나의 세션으로 처리합니다.
  3. 세션 아이디가 누출되어도 같은 IP에서 접속되지 않으면, 세션을 가로챌 수 없습니다.
  4. 관리자 로그인이 성공적으로 이루어지면, 세션아이디가 새로이 할당됩니다. 마찬가지로 관리자 세션이 로그아웃되면 해당 세션 레코드는 삭제됩니다.
    • 관리자의 경우 IP에 따른 재사용을 하지 않습니다. 따라서, 손님의 경우 IP가 같은 경우 공유하지만, 관리자의 경우 독립된 세션을 할당하게 됩니다.
  • 세션관련 문제를 디버깅할 때는 다음과 같은 시험을 해 보면 됩니다.

  • config.php 에 다음과 같은 설정을 하면, 맨 아래에 세션 변수들을 볼 수 있습니다.

    $service['debug_session_dump'] = 1; $service['enableDebugMode'] = true;

  1. FF, IE 로 손님 접속을 합니다. a. 두 세션 아이디는 모두 같게 나와야 정상입니다.
  2. FF 로 손님 오픈아이디 로그인을 합니다. a. FF에는 새로운 세션 아이디가 할당되어 오픈아이디 세션이 만들어지는 것이 정상입니다. a. IE에는 로그인하는 중간 만들어진 쓰레기 데이터가 있을 수 있습니다만, 이것을 이용하여 로그인을 계속할 수는 없습니다.
  3. 이어서, FF 로 이메일로된 관리자 로그인을 합니다. a. FF의 세션 아이디는 유지되며, 관리자 권한을 얻습니다. 오픈아이디는 로그아웃됩니다.
  4. 이어서, FF 로그아웃을 합니다. a. 세션은 삭제됩니다. DB에서 확인할 수 있습니다. a. IE와 같은 세션 아이디를 획득하게 됩니다.
  5. 이어서, FF 로 관리자와 연결된 오픈아이디로 로그인을 합니다. a. FF는 새로운 세션 아이디를 얻으며, 관리자 권한과 오픈아이디를 모두 얻습니다.
Clone this wiki locally