HTTP 세션 문제점
HTTP(Hypertext Transfer Protocol) 세션을 작성하거나 사용할 때 문제점에 대한 문제점 해결 정보를 사용합니다.
여기 설명된 세션 관리자 설정값을 보고 업데이트하려면 관리 콘솔을 사용하십시오. 문제의 애플리케이션을 호스트하는 Application Server를 선택하고 추가 특성 아래에서 웹 컨테이너를 선택한 후 세션 관리자를 선택하십시오.
![[AIX Solaris HP-UX Linux Windows]](../images/dist.gif)
![[IBM i]](../images/iseries.gif)
- 세션 관리자 관련 문제점의 디버깅에 대한 일반적인 단계는 HTTP 세션 관리자 문제점 해결 팁의 내용을 검토하십시오.
세션 관리자 구성 방법과 가장 좋은 사용 실습에 대한 정보는 태스크 개요: HTTP 세션 관리의 내용을 검토하십시오.
- 사용 가능한 온라인 지원(힌트와 팁, 기술 노트 및 수정사항을 검토하여 문제점을 식별하고 문서화했는지 확인하십시오.
- 문제점이 나열되지 않은 경우 IBM 지원 센터에 문의하십시오.
HTTP 세션이 작성되지 않거나 요청 사이에서 삭제되었음
- 세션 추적 메커니즘 특성 아래에서 Enable cookies 선택란을 선택했는지 확인하십시오.
- 테스트하고 있거나 사용자가 애플리케이션에 액세스 중인 브라우저에서 쿠키가 사용 가능한지 확인하십시오.
- 세션 관리자에 지정된 쿠키 도메인을 확인하십시오. (쿠키 설정을 보거나
업데이트하려면 수정을 클릭하십시오.)
- 예를 들어, 쿠키 도메인이 ".myCom.com"으로 설정된 경우 해당 도메인 이름으로 자원에 액세스해야 합니다. (예: http://www.myCom.com/myapp/servlet/sessionservlet).
- 도메인 특성이 설정되는 경우, 이 특성은 점(.)으로 시작해야 합니다. Netscape의 특정 버전은 도메인 이름이 점으로 시작하지 않을 경우 쿠키를 승인하지
않습니다. Internet Explorer는 점이 있는 도메인이나 점이 없는 도메인이나 모두 승인합니다. 예를 들어, 도메인 이름이 mycom.com으로 설정된 경우 Netscape 및 Internet Explorer가 해당 쿠키를
신뢰할 수 있도록 .mycom.com으로 변경하십시오. 참고: 서버가 다른 호스트에 있으면, 플러그인이 있는 웹 서버와 같은 프론트 엔드 라우터를 구성하거나 쿠키 도메인을 설정하여 모든 서버로 세션 쿠키가 플로우되는지 확인하십시오.
특성에서
- SessionManager에서 지정된 쿠키 경로를 확인하십시오. 문제점 URL이 계층적으로 지정된 쿠키 경로 아래에 있는지 여부를 검사하십시오. 그렇지 않으면 쿠키 경로를 정정하십시오.
- 쿠키 최대 유효기간 특성이 설정된 경우 시간대를 포함하여 클라이언트(브라우저) 머신의 날짜 및 시간이 서버의 날짜 및 시간과 같은지 확인하십시오. 클라이언트와 서버의 시간 차이가 "쿠키 최대 유효 기간"을 초과할 경우 쿠키가 액세스 후 만료되므로 모든 액세스는 새 세션이 됩니다.
- 세션을 추적하는 엔터프라이즈 애플리케이션 내에 여러 개의 웹 모듈이 있는 경우
- 하나의 엔터프라이즈 애플리케이션 내 웹 모듈 사이에 여러 다른 세션 설정을 가지려는 경우, 각 웹 모듈이 다른 쿠키 이름 또는 경로를 지정해야 합니다.
- 하나의 엔터프라이즈 애플리케이션에 있는 여러 웹 모듈이 공통 쿠키 이름 및 경로를 사용하는 경우 "쿠키 최대 유효 기간"과 같은 HTTP 세션 설정이 모든 웹 모듈에 대해 동일해야 합니다. 그렇지 않으면, 쿠키 동작이 예측 불가능하며 세션을 작성하는 애플리케이션에 따라 달라집니다. 이는 웹 모듈이 별도로 유지보수하는 세션 데이터에 영향을 주지 않습니다.
- 브라우저와 서버 사이의 쿠키 흐름을 확인하십시오.
- 브라우저에서 "쿠키 프롬프트"를 사용으로 설정하십시오. 서블릿을 시작하고 쿠키가 프롬프트되고 있는지 확인하십시오.
서버에서 세션 관리자 추적을 사용 가능하게 하십시오. 추적 스펙 "com.ibm.ws.session.*=all=enabled"를 사용하여 HTTP 세션 관리자 컴포넌트에 대해 추적을 사용으로 설정하십시오.추적이 사용 가능하게 된 후, 세션 사용 서블릿 또는 JSP를 사용해 보고 추적 출력 덤프 및 찾아보기 지시사항을 따르십시오.
- 브라우저에서 세션 서블릿에 액세스하십시오.
- 브라우저가 쿠키에 대해 프롬프트합니다. jsessionid를 기록해 두십시오.
- 서블릿을 다시 로드하고 새 쿠키가 전송된 경우 쿠키를 기록해 두십시오.
- 세션 추적을 확인하고 세션 ID를 찾은 후 스레드 요청을 추적하십시오. 세션이 웹 요청 사이에서 안정적인지를 확인하십시오.
- 세션 요청 시작인 getIHttpsession(...)을 찾으십시오.
- 세션 요청 종료인 releaseSession(..)을 찾으십시오.
- 쿠키 대신 URL 재기록을 사용하는 경우
- 애플리케이션 탐색 경로에 정적 HTML 페이지가 없는지 확인하십시오.
서블릿과 JSP 파일이 올바르게 URL 재기록을 구현하고 있는지 확인하십시오. 세부사항과 예의 경우는 세션 추적 옵션의 내용을 참조하십시오.
- 세션 추적 메커니즘으로 SSL을 사용하고 있다면
제거된 기능: SSL ID를 사용하는 세션 추적은 WebSphere Application Server 버전 7.0에서 더 이상 사용되지 않습니다. 쿠키를 사용하도록 세션 추적을 구성하거나, URL 재작성을 사용하도록 애플리케이션을 수정할 수 있습니다. depfeat
- IBM HTTP Server 또는 iPlanet HTTP Server에서 SSL이 사용 가능한지 확인하십시오.
세션 추적 옵션을 검토하십시오.
- 클러스터(다중 노드) 환경에 있는 경우 세션 지속이 사용 가능한지 확인하십시오.
HTTP 세션이 지속적이지 않습니다.
- 데이터 소스를 확인하십시오.
- 세션 관리자의 지속 설정 특성을 확인하십시오.
- 세션 지속성을 이용하려는 경우, 지속성이 데이터베이스로 설정되었는지 확인하십시오.
지속성은 메모리 대 메모리 복제에도 설정할 수 있습니다.
- Database-based persistence를 사용하는 경우 다음을 수행하십시오.
- 세션 관리자에 올바르게 지정된 데이터 소스의 JNDI 이름을 확인하십시오.
- 데이터베이스에 액세스하기 위한 올바른 사용자 ID와 비밀번호를 지정하십시오.
관리 콘솔에서 기존의 데이터 소스 특성에 대해 이 설정을 확인해야 합니다. 세션 관리자가 자동으로 사용자를 위한 세션 데이터베이스를 작성하지 않습니다.
- 데이터 소스는 비JTA여야 합니다(예: 비XA 사용 가능).
JVM 로그에서 해당 데이터베이스 오류 메시지를 확인하십시오.
로그에서 해당 데이터베이스 오류 메시지를 확인하십시오.
- DB2®에서 4k가 아닌 다른 행 크기의 경우, 지정된 행 크기가 DB2 페이지 크기와 일치해야 합니다. 테이블 공간 이름이 올바르게 설정되었는지 확인하십시오.
- 메모리 기반 지속성을 사용하는 경우(Network Deployment 환경에서만 사용 가능):
- 검토 메모리 대 메모리 복제.
- 세션 관리자의 내부 복제 도메인 특성을 검토하십시오.
세션이 동일한 클라이언트 시스템의 여러 브라우저 간에 공유됩니다.
이 작동은 브라우저에 따라 다릅니다. 브라우저 벤더 간에 차이가 있으며 브라우저를 새 프로세스로 실행했는지 또는 기존 브라우저 세션의 서브프로세스로 실행했는지에 따라 변경될 수 있습니다(예: Windows에서는 Ctrl-N을 누름).
쿠키가 세션 추적 메커니즘으로 사용되는 경우, 세션 관리자의 쿠키 최대 유효 기간 특성도 이 작동에 영향을 미칩니다. 최대 유효 기간이 일부 양수 값으로 설정되는 경우, 모든 브라우저 인스턴스가 지정된 최대 유효 기간에 대해 클라이언트의 파일로 지속되는 쿠키를 공유합니다.
세션이 지정된 세션 제한시간 후 바로 무효화되지 않음
세션 관리자 무효화 프로세스 스레드가 x초마다 실행되어 유효하지 않은 세션을 무효화시킵니다. 여기서, x는 세션 관리자 특성에 지정된 세션 제한시간 간격을 기준으로 결정됩니다. 기본값이 30분인 경우, x는 300초 정도입니다. 이 경우, 특정 세션이 무효화되려면 제한시간 임계값 30분을 지나 최대 5분(300초)이 걸릴 수 있습니다.
JavaServer Pages가 원치 않는 세션을 작성하고 있습니다.
<% @page session="false" %>
![[AIX Solaris HP-UX Linux Windows]](../images/dist.gif)
![[IBM i]](../images/iseries.gif)
하나의 클라이언트만을 위한 세션 데이터가 다른 클라이언트에 표시됨
보기 드문 상황에서, 보통 애플리케이션 오류로 인해 하나의 클라이언트만을 위한 세션 데이터가 다른 클라이언트에 표시될 수 있습니다. 이러한 상황을 세션 데이터 크로스오버라고 합니다. DebugSessionCrossover 사용자 정의 특성이 true로 설정되는 경우 세션 데이터 크로스오버의 인스턴스를 발견하여 로그할 수 있습니다. 요청과 연관된 세션만 액세스 또는 참조되었는지 확인하는 검사가 수행됩니다. 불일치가 발견되면 메시지가 로깅됩니다. 이 메시지는 문제점의 디버깅을 위한 시작점을 제공합니다. 이러한 추가 확인은 사용자가 작성한 스레드가 아니라 WebSphere에서 관리하는 디스패치 스레드에서 실행 중일 경우에만 수행됩니다.
이 특성을 설정하는 방법에 대한 추가 정보는 웹 컨테이너 사용자 정의 특성의 내용을 참조하십시오.
HTTP 세션 타이머가 만기된 후 사용자가 로그아웃되지 않음
WebSphere Application Server 사용자가 애플리케이션에 로그온하여 지정된 HTTP 세션 제한시간 값보다 오래 유휴 상태인 경우, 사용자 정보가 무효화되지 않고 LTPA 토큰 제한시간 초과가 발생할 때까지 사용자 신임이 활성 상태로 유지됩니다.
- 관리 콘솔에서 보안 > 글로벌 보안을 클릭하십시오.
- 사용자 정의 특성 아래에서 새로 작성을 클릭하십시오.
- 이름 필드에 com.ibm.ws.security.web.logoutOnHTTPSessionExpire를 입력하십시오.
- 값 필드에 true를 입력하십시오.
- 적용 및 저장을 클릭하여 구성에 대한 변경사항을 저장하십시오.
- 서버를 재동기화 및 다시 시작하십시오.
세션 지속성이 사용되는 애플리케이션을 업데이트할 경우 런타임 중에 예외가 발생할 수 있습니다.
세션 지속성이 사용 설정되고 런타임 시 업데이트를 실행하는 사용자는 애플리케이션이 다시 시작된 후 예상치 못한 예외를 경험할 수 있습니다.
저장된 속성을 변경하는 업데이트가 작성되면 애플리케이션이 이러한 변경사항을 처리할 수 없는 경우 애플리케이션 업데이트 이전에 연관된 애플리케이션에서 작성한 세션을 모두 무효화해야 합니다. 이러한 상황에서는 모든 세션 오브젝트를 백엔드에서도 제거해야 합니다. 이러한 세션을 적절히 제거하는 방법에 대해 계속 학습하려면 HTTP 세션 무효화 정보를 참조하십시오.