PHP 5.4.33 Released

실행시 설정

이 함수의 작동은 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 < 4.2.3에서 PHP_INI_ALL. PHP < 5에서 PHP_INI_PERDIR. 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 파일에서 설정할 수 있는 옵션을 지원합니다. 간단한 설명이 아래 있습니다.

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을 사용하기 전에 이러한 디렉토리를 생성해야 합니다. 이를 위해 mod_files.sh로 불리는 작은 쉘 스크립트가 ext/session에 존재합니다. 윈도우 버전은 mod_files.bat입니다. N이 사용되고 0보다 크면 자동 쓰레기 수거를 수행하지 않습니다. php.ini에서 자세한 정보를 확인하십시오. 또한, N을 사용할 때 session.save_path를 "따옴표"로 감싸야 합니다. 구분자(;)가 php.ini에서 주석으로 사용되기 때문입니다.

Warning

이 설정을 /tmp(기본값)처럼, 누구라도 읽을 수 있는 디렉토리로 설정하면, 서버의 다른 사용자가 그 디렉토리 목록을 얻어서 세션을 훔칠 수 있습니다.

Note: PHP 4.3.6 이전에 윈도우 사용자가 PHP 세션 함수를 사용하려면, 이 값을 변경해야 합니다. 유효한 경로를 지정해야 합니다. 예: 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 내부 형식(phpphp_binary)과 WDDX(wddx)를 지원합니다. WDDX는 PHP가 WDDX 지원과 함께 컴파일 되었을 경우에만 지원합니다. 기본값은 php입니다.
session.gc_probability integer
session.gc_probabilitysession.gc_divisor와 연계하여 gc(쓰레기 수거) 루틴의 시작 확률을 관리합니다. 기본값은 1입니다. 자세한 내용은 session.gc_divisor를 참고하십시오.
session.gc_divisor integer
session.gc_divisorsession.gc_probability와 결합하여 각 세션 초기화 시에 gc(쓰레기 수거) 프로세스를 시작할 확률을 정의합니다. 확률은 gc_probability/gc_divisor를 사용하여 계산합니다. 즉, 1/100은 각 요청시에 GC 프로세스를 시작할 확률이 1%입니다. session.gc_divisor의 기본값은 100입니다.
session.gc_maxlifetime integer
session.gc_maxlifetime은 데이터가 '쓰레기'로 취급되고 청소할 시간을 초 단위로 지정합니다. 쓰레기 수거는 세션 시작시에 일어납니다.

Note:

서로 다른 스크립트에서 서로 다른 값의 session.gc_maxlifetime을 가질 수 있지만, 세션 데이터 저장에 같은 공간을 사용하면 최소값을 가진 스크립트가 데이터를 청소합니다. 이런 경우, 이 지시어를 session.save_path와 함께 사용하십시오.

Note: 기본 파일 기반 세션 핸들러를 사용할 때, 파일시스템이 접근 시간(atime)을 추적할 수 있어야 합니다. 윈도우 FAT는 그렇지 않기에, FAT 파일시스템이나 atime 추적이 없는 다른 파일시스템에 세션을 저장할 경우 세션 쓰레기 수거를 다룰 다른 방법을 고려해야 합니다. PHP 4.2.3부터 atime 대신에 mtime(변경 시각)을 사용합니다. 그러므로, atime 추적이 없는 파일시스템에서도 문제가 없습니다.

session.referer_check string
session.referer_check는 각 HTTP 리퍼러를 확인할 서브문자열을 가집니다. 클라이언트에서 리퍼러를 전송하고 서브스트링이 발견되지 않으면, 부가된 세션 id는 유효하지 않은 것으로 표시합니다. 기본값은 빈 문자열입니다.
session.entropy_file string
session.entropy_file은 세션 id 생성 프로세스에서 추가적인 무차별 소스로 사용할 외부 자원(파일) 경로를 지정합니다. 예를 들면 많은 유닉스 시스템에서 사용할 수 있는 /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를 저장하기 위하여 쿠키 사용할 지 여부를 지정합니다. 이 설정을 활성화하면 URL로 전달되는 세션 id에 관련한 공격을 방지할 수 있습니다. 이 설정은 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()를 참고하십시오.

Note:

만료 타임스탬프는 서버 시간에 상대적으로 설정되므로, 클라이언트 브라우저가 같은 시간일 필요는 없습니다.

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 공격을 통한 식별 훔치기를 감소시키는데 도움을 줍니다. (그러나 모든 브라우저에서 지원하지는 않습니다)
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는 투명 sid 지원을 활성화할지 결정합니다. 기본값은 0(비활성화)입니다.

Note: PHP 4.1.2까지, --enable-trans-sid로 컴파일시에 활성화했습니다. PHP 4.2.0부터, trans-sid 기능은 항상 컴파일됩니다. URL 기반 세션 관리는 쿠키 기반 세션 관리에 비하여 추가적인 보안 위험이 있습니다. 예를 들면, 사용자가 활성적인 세션 ID를 포함하는 URL을 email로 친구에게 보낼 수도 있으며, 사용자가 세션 ID를 포함하는 URL을 즐겨찾기에 저장하여 항상 같은 세션 ID로 접근할 수도 있습니다.

session.bug_compat_42 boolean
PHP 4.2.3까지 문서화되지 않은 기능/버그로 register_globals가 꺼져있음에도 불구하고 전역 영역에서 세션 변수를 초기화할 수 있었습니다. PHP 4.3.0부터 session.bug_compat_warn이 켜져있으면, 이 기능을 사용할 때 경고해줍니다. 이 기능/버그는 이 지시어를 비활성화하면 사용할 수 없게 됩니다.
session.bug_compat_warn boolean
PHP 4.2.3까지 문서화되지 않은 기능/버그로 register_globals가 꺼져있음에도 불구하고 전역 영역에서 세션 변수를 초기화할 수 있었습니다. PHP 4.3.0부터 session.bug_compat_42session.bug_compat_warn가 켜져 있으면 경고가 발생합니다.
session.hash_function mixed
session.hash_function은 세션 ID 생성에 사용할 해시 알고리즘을 지정합니다. '0'은 MD5(128비트)이고, '1'은 SHA-1(160비트)입니다.

PHP 6.0.0부터 sha512whirlpool처럼, 해시 확장(사용할 수 있다면)에서 제공하는 어떠한 알고리즘이라도 지정할 수 있습니다. 지원하는 모든 알고리즘의 목록은 hash_algos() 함수로 얻을 수 있습니다.

Note:

이 지시어는 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, "-", ",")입니다.

Note:

이 지시어는 PHP 5에서 추가되었습니다.

url_rewriter.tags string
url_rewriter.tags는 투명 sid 지원에서 어떠한 HTML 태그를 세션 id를 포함하도록 다시 쓸 지 지정합니다. 기본값은 a=href,area=href,frame=src,input=src,form=fakeentry,fieldset=입니다.

Note: HTML/XHTML strict 호환하게 하려면, form 엔트리를 제거하고 폼 필드 주위에 <fieldset> 태그를 사용하십시오.

track_varsregister_globals 환경 설정이 세션 변수의 저장과 복구에 영향을 줍니다.

Note:

PHP 4.0.3부터, track_vars는 항상 켜져 있습니다.

add a note add a note

User Contributed Notes 10 notes

up
2
hassankhodadadeh at NOSPAM dot gmail dot com
2 years ago
max value for "session.gc_maxlifetime" is 65535. values bigger than this may cause  php session stops working.
up
1
00 at f00n dot com
6 years ago
After having many problems with garbage collection not clearing my sessions I have resolved it through the following.

First I found this in the php.ini (not something i noticed as i use phpinfo(); to see my hosting ini).

; NOTE: If you are using the subdirectory option for storing session files
;       (see session.save_path above), then garbage collection does *not*
;       happen automatically.  You will need to do your own garbage

; collection through a shell script, cron entry, or some other method. ;       For example, the following script would is the equivalent of
;       setting session.gc_maxlifetime to 1440 (1440 seconds = 24 minutes):
;          cd /path/to/sessions; find -cmin +24 | xargs rm

With this is mind there are options.

1. dont use a custom save_path.
** This means if your isp hasnt defaulted your session temp to something safer than install default or you are using a shared directory for session data then you would be wise to use named sessions to keep your session from being viewable in other people's scripts.  Creating a unique_id name for this is the common method. **

2. use your custom folder but write a garbage collection script.

3. use a custom handler and a database
up
0
jlevene at etisoftware dot com
1 year ago
Being unable to find an actual copy of mod_files.sh, and seeing lots of complaints/bug fix requests for it, here's one that works.  It gets all its parameters from PHP.INI, so you don't have the opportunity to mess up:

#!/bin/bash
#
# Creates directories for PHP session storage.
# Replaces the one that "comes with" PHP, which (a) doesn't always come with it
# and (b) doesn't work so great.
#
# This version takes no parameters, and uses the values in PHP.INI (if it
# can find it).
#
# Works in OS-X and CentOS (and probably all other) Linux.
#
# Feb '13 by Jeff Levene.

[[ $# -gt 0 ]] && echo "$0 requires NO command-line parameters.
It gets does whatever is called for in the PHP.INI file (if it can find it).
" && exit 1

# Find the PHP.INI file, if possible:
phpIni=/usr/local/lib/php.ini                        # Default PHP.INI location
[[ ! -f "$phpIni" ]] && phpIni=/etc/php.ini            # Secondary location
[[ ! -f "$phpIni" ]] && phpIni=                        # Found it?

# Outputs the given (as $1) parameter from the PHP.INI file:
# The "empty" brackets have a SPACE and a TAB in them.
#
PhpConfigParam() {
    [[ ! "$phpIni" ]] && return
    # Get the line from the INI file:
    varLine=`grep "^[     ]*$1[     ]*=" "$phpIni"`

    # Extract the value:
    value=`expr "$varLine" : ".*$1[     ]*=[     ]*['\"]*\([^'\"]*\)"`
    echo "$value"
    }

if [[ "$phpIni" ]]
then
    savePath=`PhpConfigParam session.save_path`
    # If there's a number and semicolon at the front, remove them:
    dirDepth=`expr "$savePath" : '\([0-9]*\)'`
    [[ "$dirDepth" ]] && savePath=`expr "$savePath" : '[0-9]*;\(.*\)'` || dirDepth=0
    bits=`PhpConfigParam session.hash_bits_per_character`
    case "x$bits" in
        x)    echo "hash_bits_per_character not defined.  Not running." ; exit 2 ;;
        x4) alphabet='0 1 2 3 4 5 6 7 8 9 a b c d e f' ;;
        x5) alphabet='0 1 2 3 4 5 6 7 8 9 a b c d e f g h i j k l m n o p q r s t u v' ;;
        x6) alphabet='0 1 2 3 4 5 6 7 8 9 a b c d e f g h i j k l m n o p q r s t u v'
            alphabet="$alphabet w x y z A B C D E F G H I J K L M N O P Q R S T U V W"
            alphabet="$alphabet X Y Z - ,"
            ;;
        *)    echo "unrecognized hash_bits_per_character.  Not running." ; exit 2 ;;
    esac
else
    echo "Cannot find the PHP.INI file.  Not running.  Sorry."
    exit 2
fi

# The depth of directories to create is $1.  0 means just create the named
# directory.  Directory to start with is $2.
#
# Used recursively, so variables must be "local".

doDir() {
    local dir="$2"
    if [[ -d "$dir" ]]
    then
        echo "Directory '$dir' already exists.  No problem."
    elif [[ -f "$dir" ]]
    then
        echo "FILE '$dir' exists.  Aborting." ; exit 2
    else
        if mkdir "$dir"
        then
            echo "Directory '$dir' created."
        else
            echo "Cannot create directory '$dir'.  Aborting." ; exit 2
        fi
    fi
    chmod a+rwx "$dir"
    if [[ $1 -gt 0 ]]
    then
        local depth=$(( $1 - 1 ))
        for letter in $alphabet
        do    doDir $depth "$dir/$letter"
        done
    fi
    }
   
   
echo "Running with savePath='$savePath', dirDepth=$dirDepth, and bitsPerCharacter=$bits."
sleep 3

doDir $dirDepth "$savePath"

exit 0
up
0
AskApache
3 years ago
This is how I set my session.save_path
session.save_path = "1;/home/askapache/tmp/s"
So to create the folder structure you can use this compatible shell script, if you want to create with 777 permissions change the umask to 0000;
sh -o braceexpand -c "umask 0077;mkdir -p s/{0..9}/{a..z} s/{a..z}/{0..9}"

Then you can create a cronjob to clean the session folder by adding this to your crontab which deletes any session files older than an hour:
@daily find /home/askapache/tmp/s -type f -mmin +60 -exec rm -f {} \; &>/dev/null

That will create sessions in folder like:
/home/askapache/tmp/s/b/sess_b1aba5q6io4lv01bpc6t52h0ift227j6

I don't think any non-mega site will need to go more than 1 levels deep.  Otherwise you create so many directories that it slows the performance gained by this.
up
0
orbill
4 years ago
apparently the default value for session.use_only_cookies has changed in 5.3.3 from 0 to 1. If you haven't set this in your php.ini or your code to 0 transparent sessions won't work.
up
0
Nicholas
4 years ago
Transient sessions do not appear to be working in 5.3.3

E.g.

<?php
    ini_set
("session.use_cookies", 0);
   
ini_set("session.use_trans_sid", 1);
   
session_start();
   
    if (isset(
$_SESSION["foo"])) {
        echo
"Foo: " . $_SESSION["foo"];
    } else {
       
$_SESSION["foo"] = "Bar";
        echo
"<a href=?" . session_name() . "=" . session_id() . ">Begin test</a>";
    }
?>

This works in 5.2.5, but not 5.3.3
up
0
mikaelkael at php dot net
5 years ago
Recently, I needed to change the session save_path in my program under Windows. With an ini_set('session.save_path', '../data/sessions'); (and session.gc_divisor = 1 for test), I always obtain 'Error #8 session_start(): ps_files_cleanup_dir: opendir(../data/sessions) failed: Result too large'.

I corrected this by changing with ini_set('session.save_path', realpath('../data/sessions'));
up
-1
Wouter
4 years ago
When setting the session.cookie_lifetime directive in a .htaccess use string format like;

php_value session.cookie_lifetime "123456"

and not

php_value session.cookie_lifetime 123456

Using a integer as stated above dit not work in my case (Apache/2.2.11 (Ubuntu) PHP/5.2.6-3ubuntu4.5 with Suhosin-Patch mod_ssl/2.2.11 OpenSSL/0.9.8g)
up
-2
sony-santos at bol dot com dot br
5 years ago
In response to 00 at f00n, this very page explains:

"(...) if N is used and greater than 0 then automatic garbage collection will not be performed (...)"

So you can actually use custom save_path with automatic garbage collection, since you don't use the subdirectory option (that N subdirectory levels).
up
-9
phpforcharity dot 5 dot pistos at geoshell dot com
6 years ago
To get session IDs to show up in URIs, and not get stored via cookies, you must not only set session.use_cookies to 0, but also set session.use_trans_sid to 1.  Otherwise, the session ID goes neither in a cookie nor in URIs!
To Top