2009년 11월 5일 목요일

PHP 세션 - 인스톨 / 설정

출처 : 수면부족 ( http://breakpoint.tistory.com/131 )


PHP 세션 - 인스톨 / 설정

외부라이브러리 필요없음.

PHP의 세션기능은 디폴트로 유효화 되어있다.  세션 기능을 무효화해서 PHP 를 구축하고 싶으면 configure 에 옵션 --disable-session 를 지정해야한다.  세션 기억영역으로 공유메모리(mm) 를 사용하려면 PHP 의 configure 에 --with-mm[=DIR] 를 지정한다.

Windows 버젼의 PHP 에는 이 확장모듈이 내장되어있다.  함수를 사용하기위해서는 확장모듈을 추가 로드할 필요는 없다.


PHP 세션 - 실행시 설정 (런타임 설정)
php.ini 의 설정에 따라 동작이 바뀐다.

세션 설정 옵션
이름 디폴트 변경가능여부 변경이력
session.save_path "" PHP_INI_ALL  
session.name "PHPSESSID" PHP_INI_ALL  
session.save_handler "files" PHP_INI_ALL  
session.auto_start "0" PHP_INI_ALL  
session.gc_probability "1" PHP_INI_ALL  
session.gc_divisor "100" PHP_INI_ALL PHP 4.3.2 부터
session.gc_maxlifetime "1440" PHP_INI_ALL  
session.serialize_handler "php" PHP_INI_ALL  
session.cookie_lifetime "0" PHP_INI_ALL  
session.cookie_path "/" PHP_INI_ALL  
session.cookie_domain "" PHP_INI_ALL  
session.cookie_secure "" PHP_INI_ALL PHP 4.0.4 부터
session.cookie_httponly "" PHP_INI_ALL PHP 5.2.0 부터
session.use_cookies "1" PHP_INI_ALL  
session.use_only_cookies "1" PHP_INI_ALL PHP 4.3.0 부터
session.referer_check "" PHP_INI_ALL  
session.entropy_file "" PHP_INI_ALL  
session.entropy_length "0" PHP_INI_ALL  
session.cache_limiter "nocache" PHP_INI_ALL  
session.cache_expire "180" PHP_INI_ALL  
session.use_trans_sid "0" PHP_INI_ALL PHP_INI_ALL 은  PHP <= 4.2.3 , PHP_INI_PERDIR 은 PHP < 5 부터.
PHP 4.0.3 부터
session.bug_compat_42 "1" PHP_INI_ALL PHP 4.3.0 부터. PHP 6.0.0 에서 삭제
session.bug_compat_warn "1" PHP_INI_ALL PHP 4.3.0 부터.
PHP 6.0.0 에서 삭제
session.hash_function "0" PHP_INI_ALL PHP 5.0.0 부터
session.hash_bits_per_character "4" PHP_INI_ALL PHP 5.0.0 부터
url_rewriter.tags "a=href,area=href,
frame=src,form=,fieldset="
PHP_INI_ALL PHP 4.0.4 부터

PHP_INI_*  정수의 설명 및 정의에 대해서는 php.ini 디렉티브 를 참조.

세션 관리 시스템은 php.ini파일에 기술 가능한 많은 설정옵션을 지원한다.

session.save_handler string

session.save_handler  는  세션에 관련되는 데이터의 보존 및 값을 구할때 사용하는 핸들러를 정의한다.  디폴트는 files  . 각 확장모듈에서 독자 save_handler 를 사용할 수 있다.  인스톨 환경단위에서 등록되어 있는 핸들러를 구하려면 phpinfo() 를 사용. session_set_save_handler() 참조


session.save_path string

session.save_path 는 보존 핸들러에 넘겨주는 파라미터를 정의. 디폴트의 파일 핸들러를 선택한 경우 파일이 작성되는 곳의 패스가 넘겨진다.  session_save_path() 참조

옵션의 파라미터로서 N(수치)를 지정할 수 있다. 세션파일을 분산해서 보존할때 디렉토리 계층레벨을 결정한다. 예를들어  '5;/tmp' /tmp/4/b/1/e/3/sess_4b1e384ad74619bd212e236e52a5a174If  라는 위치에 세션파일을 생성한다.  N 을 사용하려면 관련 디렉토리가 사전에 작성되어 있어야 한다.
이를 위해 ext/session 에  mod_files.sh 라는 스크립트 파일이 존재한다.  또한 0 이상의 N 이 지정되어 있는 경우에는 자동 가비지콜렉션이 작동하지않는 사실에 주의할것. 자세한 내용은 php.ini 을 볼것.
또한 N 을 지정하는 경우 session.save_path 를  "quotes" 로 둘러싸야한다.  왜냐하면 구분자(;) 는  php.ini  에서는 코멘트로 이용되고 있기때문이다. 

경고

이 설정을 /tmp (디폴트) 처럼 어디에서도 읽어들일수 있는 디렉토리하고 있는 경우 , 서버상의 다른 유저가 이 디렉토리의 파일파일 리스트를 읽어들일 수 있기에 세션을 하이잭할 수 있다. 

주의: PHP 4.3.6 이전에서는 Windows 유저가 PHP 의 session 함수를 사용하기위해서는 이 변수를 변경해야한다. c:/temp 같이 유효한 패스를 지정할 것.

session.name string

session.name 은 세션명을 지정하여 쿠키명으로서 사용된다. 알파벳 문자만 지정해야한다. 디폴트는 PHPSESSID  이다.  session_name() 참조 


session.auto_start
boolean

session.auto_start
는 리퀘스트를 개시할때 세션모듈이 세션을 자동적으로 개시할지 여부를 지정한다.  디폴트는 0 (무효).


session.serialize_handler
string

session.serialize_handler
는  시리얼라이즈 또는 시리얼라이즈된 데이터를 복원하기위해 사용되는 핸들러의 이름을 지정한다.  현재 ( php 또는 php_binary 라는 이름의 ) PHP 내부 포맷 및 (wddx 라는 이름의 ) WDDX 가 서포트되고 있다. WDDX 는 PHP 가 WDDX 서포트 를 유효화 하여 컴파일 되어 있는 경우에만 사용가능하다.  디폴트는 php 


session.gc_probability
integer

session.gc_probability
session.gc_divisor 의 조합으로  gc (가비지콜렉션)루틴의 기동을 제어한다.  디폴트는 1 .   session.gc_divisor 참조



session.gc_divisor
integer

session.gc_divisor
session.gc_probability 의 조합으로 모든 세션의 초기화과정에서 gc(가비지콜렉션 )프로세스도 기동할 확률을 제어한다. 확률은 gc_probability/gc_divisor 으로 계산된다.  예를 들어 1/100 은 각 리퀘스트마다 1% 의 확률로 GC 프로세스가 기동한다. session.gc_divisor 의 디폴트 값은 100 이다. 


session.gc_maxlifetime
integer

session.gc_maxlifetime
은  데이터가 '쓰레기' 로 여겨져 소거될때까지의 초수를 지정한다.  가비지 콜렉션 (쓰레기의 수집) 은 세션개시할때 일어남.

주의 : 다른 값을 session.gc_maxlifetime 에 지정하고 있는 또 다른 스크립트가 세션데이터의 보존장소를 공유하고 있는 경우 , 가장 작은 설정치에 도달한 시점에서 데이터가 소거된다.  이런 경우에는 서로 session.save_path 를 사용한다.

주의 :  디폴트의 파일을 베이스로 세션핸들러를 사용하고 있는 경우 사용하는 파일시스템은 억세스 시간(atime) 을 기록할 수 있어야한다. Windows FAT 는 이게 불가능하기에  FAT 파일 시스템 또는 atime 의 기록이 불가능한 다른 파일 시스템에서 문제가 발생한경우 세션의 가비지콜렉션처리를 위해 다른 방법을 준비해야한다.
PHP4.2.3 이후 atime 대신에 mtime(갱신시간)이 사용된다. atime 를 사용할 수 없는 파일시스템의 문제가 사라짐.

session.referer_check string

session.referer_check
  에는 HTTP Referer 체크를 위한 문자열을 지정한다. Referer 가 클라이언트에 의해 송신되고 지정한 문자열이 없는 경우 세션 ID 는 무효화됨. 디폴트는 빈 문자열.


session.entropy_file
string

session.entropy_file
는 세션ID를 작성할때의 추가 엔트로피 소스 로 사용되는 외부 리소스에의 패스를 지정한다.  예를 들어 많은 UNIX 에서 이용가능한 /dev/random 또는 /dev/urandom 가 있다. 


session.entropy_length
integer

session.entropy_length
는 바로 위에서 지정한 파일로부터 읽어들이는 바이트 수를 지정한다.  디폴트는 0 (무효)


session.use_cookies
boolean

session.use_cookies
에 의해 클라이언트축에 세션ID 를 보존 할때 쿠키를 사용할지 여부를 지정한다.  디폴트는 1 (유효)


session.use_only_cookies
boolean

session.use_only_cookies
는 이 모듈이 클라이언트 쪽에 세션ID 를 보존할때 Cookie 을 사용하도록 지정한다. 이 설정을 유효화 하여 세션 ID 를 URL 에 붙여서 하는 공격을 막을 수 있다. 이 설정은 PHP 4.3.0 에서 추가되었다. PHP 6.0 이후부터 디폴트가 1 (유효) 이 됨.


session.cookie_lifetime
integer

session.cookie_lifetime
은  브라우저에게 송신하는 쿠키의 유효기간을 초단위로 지정한다. 0을 지정하면  브라우저를 닫을때까지라는 의미.  디폴트는 0 .  session_get_cookie_params()session_set_cookie_params() 참조 

주의 : 유효기간의 타임스탬프는 서버의 시각을 기본으로 해서 정해진다.


session.cookie_path
string

session.cookie_path
에 의해 session_cookie 로 설정되는 패스를 지정한다.  디폴트는 / session_get_cookie_params() 및 session_set_cookie_params() 도 참조.


session.cookie_domain
string

session.cookie_domain
에 의해  session_cookie 에서 지정하는 도메인을 지정한다. 디폴트는 지정되지않음. 이 경우는 쿠키의 사양에 따라 쿠키를 작성한 서버의 호스트명이 지정된다.  session_get_cookie_params()session_set_cookie_params() 도 참조 


session.cookie_secure
boolean

session.cookie_secure
는 시큐어한 접속을 통해서만 쿠키를 송신할지여부를 지정. 디폴트는 off
이 설정은 PHP 4.0.4 에서 추가됨.
 session_get_cookie_params()및 session_set_cookie_params() 참조


session.cookie_httponly
boolean

쿠키를 HTTP 로만 억세스가능하도록 설정. 즉 JavaScript 같은 스크립트 언어에서는 억세스가 불가능해짐 . 이 설정을 사용하면 XSS 공격에 의한 ID 도난의 위험성이 줄어든다.  ( 하지만 모든 브라우저가 이 설정을 지원하고 있지는 않다. )


session.cache_limiter
string

session.cache_limiter
에 의한  세션 페이지의 캐쉬제어 방법(none / nocache / private / private_no_expire / public) 을 지정. 디폴트는 nocache
session_cache_limiter() 참조


session.cache_expire
integer

session.cache_expire
에 의해 캐쉬된 세션페이지의 유효기간을 분단위로 지정 이 옵션은  nocache 리미터에 에서는 영향을 받지 않는다 . 디폴트는 180
session_cache_expire()도 참조


session.use_trans_sid
boolean

session.use_trans_sid
는 투과적 세션 ID 를 부가할지 여부를 지정. 디폴트는 0(무효)

주의 : PHP 4.1.2 이전 버젼에서 이 옵션은  --enable-trans-sid  로 컴파일하여 유효화하였다.  PHP 4.2.0 이후부터 trans-sid 기능은 항상 컴파일 된다. URL 를 기본으로 한 세션 관리는 쿠키를 기본으로한 세션관리보다 세큐리터 리스크가 커진다.  예를 들어 유저가 email 로 친구에게 액티브한 세션ID 를 포함한 URL 를 보낼 수도 있고, 유저는 자신의 북마크에 세션 ID 를 포함한 URL를 보존하여 항상 같은 ID 로 사용하여 사이트에 억세스할 수도 있다. 

session.bug_compat_42 boolean

PHP 버젼이 4.2.3 및 그 이전에는 예를들어 register_globals 가 무효한 경우에도 글로벌스코프에서 세션변수의 초기화를 허용하는 문서화되어 있지 않은 특징/버그가 있다.  이 기능을 사용하고 있는 경우 session.bug_compat_warn 도 유효로 하고있는 경우 PHP 4.3.0 및 그 이후버젼에서는 경고가 생긴다.  이 특징/ 버그는 이 디렉티브를 무효로 하여 막을 수 있다. 


session.bug_compat_warn
boolean

PHP 버젼이 4.2.3 및 그 이전에는 예를들어 register_globals 가 무효한 경우에도 글로벌스코프에서 세션변수의 초기화를 허용하는 문서화되어 있지 않은 특징/버그가 있다.   이 기능을  session.bug_compat_42  와  session.bug_compat_warn  를 유효화하여 사용하고 있는 경우  PHP 4.3.0  및 그 이후버젼에서 경고가 발생한다. 


session.hash_function
mixed

session.hash_function
에 의해 세션 ID 를 생성하기위해 사용되는 해쉬 알고리즘을 지정할 수 있다. '0' 은 MD5 (128 비트) 로 , '1' 은 SHA-1 (160 비트) 를 의미.

PHP 6.0.0 이후부터는 hash 확장모듈 의 임의의 알고리즘이  (이 확장모듈이 사용가능한 경우) 지정할 수 있도록됨. 예를 들어 sha512  나  whirlpool 등등... 지원되는 알고리즘들은 hash_algos() 함수로 구할 수 있다. 

주의 : 이 디렉티브는 PHP 5  에서 도입됨



session.hash_bits_per_character
integer

session.hash_bits_per_character
로 바이너리 해쉬데이터를 가독 데이터로 변환할 때 각각의 문자에 몇비트를 스토어 할지를 정의할 수 있다.  지정가능한 값은 '4' (0-9, a-f) ,'5' (0-9, a-v) 그리고 '6' (0-9, a-z, A-Z, "-", ",") 이다.

주의 : 이 디렉티브는  PHP 5 에서 도입됨.



url_rewriter.tags
string

url_rewriter.tags
는 투과적 세션 ID 의 부가기능이 유효화 되어있을 경우 세션 ID를 포함하기 위해 바뀌게 되는 HTML 태그를 지정할 수 있다.  디폴트는  a=href , area=href , frame=src , input=src , form=fakeentry , fieldset=  이다. 

주의 : HTML/XHTML strict 에 맞추고 싶은 경우에는 form 엔트리를 삭제하고 form 필드의 전후에 <fieldset> 태그를 사용할 것.

track_vars register_globals 설정은 세션변수의 보존및 회복 방법에 영향을 준다. 

주의 : PHP 4.0.3 이후 track_vars 는 항상 on 


원문링크 :
http://www.php.net/manual/en/session.setup.php
http://www.php.net/manual/en/session.installation.php
http://www.php.net/manual/en/session.configuration.php

댓글 없음:

댓글 쓰기