PHP > Tip&Tech > 세션 타임아웃 구현
 
PHP
Library
Tip&Tech
Q&A
 
PHP Function
phpschool
그누보드
Tip&Tech
  HOME > PHP > Tip&Tech
 
작성일 : 18-06-22 17:28
세션 타임아웃 구현
 글쓴이 : 덩벙이 (211.♡.155.10)
조회 : 19   추천 : 0   비추천 : 0  
   http://bbangpower-blog.blogspot.com/2017/09/php.html [4]
세션이 만료가 되지 않아 관련 내용을 찾아 보았습니다.

세션 타임아웃은 직접 구현해야 한다고 합니다. session.gc_maxlifetime이나 session.cookie_lifetime을 이용한 세션 타임아웃은 신뢰할 수 없습니다.

session.gc_maxlifetime은 세션 데이터가 가비지로 판단되어 삭제되기까지 기간을 설정합니다. 가비지 컬렉션은 세션이 시작될 때 구동됩니다.

하지만 가비지 컬렉션은 항상 시작되는 것이 아닙니다.  (session.gc_probability / session.gc_divisor) 확률로 실행이 됩니다. 만약 기본값으로 사용 설정되어 있다면 1% 확률로 가비지 컬렉션이 동작합니다. 설정값 변경을 통해서 가비지 컬렉션이 일어날 확률을 증가시키면 되지만, 가비지 컬렉션은 모든 세션 데이터에 대해서 유효성 검사를 수행하기 때문에 비용이 큰 작업입니다.

session.cookie_lifetime은 세션 데이터가 저장될 쿠키의 만료시간을 지정할 때 사용할 수 있습니다. 이 값을 조정하면 세션 시간을 조정할 수 있지만, 서버측 세션 정보는 여전히 존재하게 됩니다.

좋은 대안 중 하나는 타임스템프를 활용하여 직접 타임아웃을 구현하는 것입니다. 로그인 처리시 사용자 인증이 끝난 후 아래와 같이 타임스템프를 기록합니다.

sesstion_start();

// ...사용자 인증...

$_SESSION['LAST_ACTIVITY'] = time();

세션 검사가 필요한 모든 페이지에 아래와 같은 코드를 적용합니다.

if (isset($_SESSION['LAST_ACTIVITY']) && (time() - $_SESSION['LAST_ACTIVITY'] > 1800)) {
    // last request was more than 30 minutes ago
    session_unset();     // unset $_SESSION variable for the run-time
    session_destroy();   // destroy session data in storage
}
$_SESSION['LAST_ACTIVITY'] = time(); // update last activity time stamp

세션 데이터의 타임스탬프와 현재 타임스탬프를 비교하여 타임아웃 시간을 초과했는지 검사하고 초과되었다면 세션 정보를 파기합니다. 만약 타임아웃이 초과되지 않았다면 세션의 타임스탬프를 최신으로 갱신시켜 줍니다.

타임아웃 값은 session.gc_maxlifetime 보다 적어야 유효한 값이 됩니다. 따라서 위 코드는 아래와 같은 형태로 변경할 수 있습니다.

if (isset($_SESSION['LAST_ACTIVITY']) && (time() - $_SESSION['LAST_ACTIVITY'] > ini_get("session.gc_maxlifetime"))) {
    ...
}


 
 

Total 2,770
번호 제   목 글쓴이 날짜 추천 비추천 조회
2770 PHP로 구현한 SEED128 + CBC + PKCS5 암호화 덩벙이 08-08 0 0 16
2769 세션 타임아웃 구현 덩벙이 06-22 0 0 20
2768 CURL 사용법 덩벙이 03-16 0 0 98
2767 이미지 파일에 문자 병합 (응용 도장이미지 만들기) 덩벙이 08-11 0 0 168
2766    이미지 파일에 문자 병합 (응용 도장이미지 만들기)2 덩벙이 08-11 0 0 168
2765 php GD 이미지 합치기와 텍스트 합치기 덩벙이 08-11 0 0 157
2764 xml 데이터 submit 하기 덩벙이 08-11 0 0 153
2763 php 세션 만료 (2) 덩벙이 08-09 0 0 169
2762 php 세션 (1) 덩벙이 08-09 0 0 190
2761 PHP 문자가 한글인지 확인 is hangul char() 덩벙이 07-28 0 0 167
2760    UTF-8 한글 덩벙이 07-28 0 0 162
2759    has_hangul() 한글을 포함하고 있는지 판별하는 함수 덩벙이 07-28 0 0 168
2758    PHP함수 chr, ord의 UTF-8 확장 커스텀 함수 utf8_chr() utf8_or… 덩벙이 07-28 0 0 161
2757 PHP 파일 다운로드 구현 (1) 덩벙이 07-28 0 0 178
2756    PHP 파일 다운로드 구현 2 (한글 파일명 지원) (2) 덩벙이 07-28 0 0 150
2755    •파일을 출력하는 PHP 함수 PHP readfile() 덩벙이 07-28 0 0 152
2754 Seed_crypto.php 덩벙이 07-26 0 0 151
2753 [php] 맥주소(mac address) 추출 및 검증 소스 덩벙이 07-26 0 0 174
2752 [php] 간단한 포트 스캐너 만들기 덩벙이 07-26 0 0 165
2751 [php] 소켓을 이용한 POST Request 덩벙이 07-26 0 0 172
 1  2  3  4  5  6  7  8  9  10    
 
개인홈페이지 덤벙닷컴은 프로그래머와 디자이너위한 IT커뮤니티 공간입니다.
Copyright ⓒ www.dumbung.com. All rights reserved.