Apache / PHP에서 세션 파일의 위치


81

Ubuntu 10.10에 Apache / PHP를 설치할 때 세션 파일의 기본 위치는 무엇입니까?


12
페이지 <?php phpinfo() ?>를 작성하고 session.save_path.
prodigitalson

1
일반적으로 / tmp (IIRC)이지만 session.save_path에 대한 php.ini를 확인하십시오.
Mark Baker

답변:


79

기본값 session.save_path 으로 설정되어 ""시스템의 임시 디렉토리로 평가되는. https://bugs.php.net/bug.php?id=26757 에서이 주석을 참조하십시오 .

다가오는 릴리스 (sic)의 save_path에 대한 새 기본값은 빈 문자열이며, 이로 인해 임시 디렉토리가 검색됩니다.

임시 파일에 사용되는 디렉토리 경로를 반환하는 데 사용할 수 있습니다.sys_get_temp_dir

현재 세션 저장 경로 를 찾으려면 다음을 사용할 수 있습니다.

이 함수가 빈 문자열을 반환 할 때 임시 경로가 무엇인지 알아 보려면 이 답변 을 참조하십시오 .


68
그리고 명령 줄에서 php -r 'echo session_save_path (), "\ n";'
Richard Ayotte

위치는 Ubuntu 10.10에서 '기본값'이 아닌 설정되어 있습니다. 깨끗한 PHP 빌드는 이것을 제공 할 수 있지만 내가 사용한 데비안 / 우분투 빌드에서는 그렇지 않습니다. orig 질문은 Ubuntu 10.10과 관련이 있습니다. 따라서 사용 된 Linux 배포판에 따라 위치가 'default'/ blank / tmp와 다를 수 있으므로 마지막 주석 (또는 내 대답)마다 명령 줄에서 찾아보십시오.
bshea

4
경고!! php -r 'echo session_save_path (), "\ n";' 위에서 언급했듯이 다른 php.ini 파일 (아마도 /etc/php/7.0/apache2/php.ini 대신 /etc/php/7.0/cli/php.ini)을 사용하므로 "값이 다를 수 있습니다. session.save_path "
Magmatic

@Magmatic이 맞습니다. php.ini파일 이 두 개 있습니다 php_info(). 현재 평가 중에 어떤 파일 이 사용 중인지 알려주고 파일 locate php.ini을 찾는 데 도움이 될 것입니다.
Jonathan

참고 (마지막 2 개의 주석에 따라) : CLI PHP 버전 (명령 줄)을 사용하면 배포 및 컴파일에 따라 다른 결과가 생성 될 수 있습니다. 가장 중요한 것은 Apache 버전이 아니라는 것입니다. (하지만 INI 파일은 세션 경로만큼 동일 할 수 있습니다.) 적절한 Apache PHP.INI를 / grep하는 것이 더 좋습니다.
bshea

69

먼저 또는 session.save_path사용 값을 확인하십시오 . 비어 있지 않은 경우 세션 파일이 저장된 위치가 표시됩니다. 많은 시나리오에서 기본적으로 비어 있으며,이 경우 다음 내용을 읽습니다.ini_get('session.save_path')phpinfo()

Ubuntu 또는 Debian 시스템에서이 session.save_path설정되지 않은 경우 세션 파일은 /var/lib/php5.

RHEL 및 CentOS 시스템에서이 session.save_path설정되지 않은 경우 세션 파일이/var/lib/php/session

소스에서 PHP를 컴파일하면 session.save_path설정하지 않으면 세션 파일이 저장됩니다 /tmp(내가 직접 테스트하지는 않았습니다).


1
우분투 12.04.5 LTS를 사용하고 있으며 어떤 이유로 든 (에서 아무것도 변경하지 않았습니다 php.ini) 내 세션이 아래에 있습니다/var/lib/php5/sessions
Felipe

"설정되지 않음"? 설정되었지만 php.ini에서 주석 처리되었습니다. 이것은 값이 없거나 '설정'되지 않았 음을 의미하지는 않습니다. 명령 줄에서 다음을 수행하십시오. php -i | grep session.save_pathCLI (아마도 Apache) 세션 저장 경로의 경우. 또한 주어진 php.ini경로는 일반적으로 '기본'경로를 표시합니다. 그냥 주석 처리 된 것입니다.
bshea

그리고 예 : 기본 경로로 컴파일 된 것이 없으면 (대부분의 배포판에서 제외) 공백이 사용됩니다 (기본 컴파일). 그런 다음 시스템 온도 영역 (일반적으로 /tmp)을 대체 / 기본값으로 사용합니다. php.net/manual/en/…을
bshea

@bshea, "not set"은 빈 문자열로 설정됨을 의미합니다.
Rich

DEFAULT Ubuntu 16.04 : /etc/php/7.0/*/php.ini-> ;session.save_path = "/var/lib/php/sessions"-주석이 '설정되지 않음'이 의미하는 것은 아닙니다. 분명히 'blank'(/ tmp)가 아닌 다른 것으로 설정되어 있으며 비어 있거나 널 문자열이 아닙니다.
bshea

16

에 대한 컴파일 된 기본값이 확실하지 않은 경우 session.save_path관련 php.ini.
일반적으로 주석 처리 된 기본값이 표시됩니다.

Ubuntu / Debian 이전 / 새 php.ini위치 :
Apache가있는 /etc/php5/apache2/php.ini
이전 php5 : NGINX + FPM이있는 이전 php5 : /etc/php5/fpm/php.ini
Apache가있는 Ubuntu 16+ : /etc/php/*/apache2/php.ini*
NGINX + FPM이있는 Ubuntu 16+- /etc/php/*/fpm/php.ini*

* /*/= 시스템에 설치된 현재 PHP 버전.

Apache 에서 사용 중인 PHP 버전을 표시하려면 :

$ a2query -m | grep "php" | grep -Eo "[0-9]+\.[0-9]+"

7.3

PHP 7.3이이 예제에서 실행되는 버전이므로 다음과 같이 사용할 수 있습니다 php.ini.

$ grep "session.save_path" /etc/php/7.3/apache2/php.ini

;session.save_path = "/var/lib/php/sessions"

또는 결합 된 원 라이너 :

$ APACHEPHPVER=$(a2query -m | grep "php" | grep -Eo "[0-9]+\.[0-9]+") \ && grep ";session.save_path" /etc/php/${APACHEPHPVER}/apache2/php.ini

결과:

;session.save_path = "/var/lib/php/sessions"


또는 PHP 자체를 사용하여 "cli"환경을 사용하여 값을 가져옵니다 (아래 참고 참조).

$ php -r 'echo session_save_path() . "\n";'
/var/lib/php/sessions
$

이것도 작동합니다.

php -i | grep session.save_path

php -r 'echo phpinfo();' | grep session.save_path

노트:

의 'cli'(명령 줄) 버전은 php.ini 일반적으로 Apache2 / FPM 버전과 동일한 기본값을 갖습니다 (최소한 session.save_path). 유사한 명령을 사용하여 웹 서버의 현재 PHP 모듈 설정을 웹 페이지에 에코하고 wget / curl을 사용하여 정보를 가져올 수도 있습니다. 이 많은 게시물 있습니다 에 대한 phpinfo()이 점에서 사용. 그러나 PHP 인터페이스를 사용하거나 기본값을 grep올바르게 php.ini표시 하는 것이 더 빠릅니다 .

편집 : @aesede 주석 당-> 추가 php -i. 감사


8
참고 php -i로 CLI에서 phpinfo () 동등한 것을 얻을 수 있습니다 .
aesede 2015 년

15

또 다른 일반적인 기본 위치 /tmp//var/lib/php5/


왜 / var / lib / php5 /는 쓸 수없고 chmodding / chowning이 필요합니다. PHP는 기본적으로 쓰기 가능한 세션 위치를 설정하지 않아야합니까?
CMCDragonkai

2
나는 공유 호스트에서 다른 사람들이 사람들의 세션을 하이재킹하려고 할 수 없다고 생각합니다. 즉, 세션에 "username : admin"이라고 쓰고 임의의 세션 ID를 설정 한 다음 PHPSESSID를 설정합니다. 공유 호스트 환경에서 Drupal 또는 Wordpress와 같은 것에 액세스하는 것이 매우 쉬울 것입니다. (단지 관리자 계정으로 로그인합니다.)
Mattisdada 2014

4

Mac에서 세션의 올바른 경로를 찾는 데 같은 문제가있었습니다. 대체로 CLI PHP에는 Apache 모듈과 다른 임시 디렉토리가 있음을 알았습니다. Apache used /var/tmp, CLI는 /var/folders/kf/hk_dyn7s2z9bh7y_j59cmb3m0000gn/T. 그러나 두 가지 방법 모두 비어 sys_get_temp_dir()있을 때 올바른 길을 얻었습니다 session.save_path. PHP 5.5.4 사용.


1

위의 항목 중 어느 것도 PHP 7.2와 함께 CentOS 7의 IUS 리포지토리를 사용하여 저에게 효과적이었습니다.

php -v
> PHP 7.2.30 (cli) (built: Apr 19 2020 00:32:29) ( NTS )

php -r 'echo session_save_path(), "\n";
> 

php -r 'echo sys_get_temp_dir(), "\n";'
> /tmp

그러나 세션은 /tmp폴더에 저장되지 않고 다음 폴더에 저장되었습니다 /var/lib/php/mod_php/session/.

ls /var/lib/php/mod_php/session/
> sess_3cebqoq314pcnc2jgqiu840h0k  sess_ck5dtaerol28fpctj6nutbn6fn  sess_i24lgt2v2l58op5kfmj1k6qb3h  sess_nek5q1alop8fkt84gliie91703
> sess_9ff74f4q5ihccnv6com2a8409t  sess_dvrt9fmfuolr8bqt9efdpcbj0d  sess_igdaksn26hm1s5nfvtjfb53pl7  sess_tgf5b7gkgno8kuvl966l9ce7nn

0

나는 / tmp /를 믿는다. 그래도 phpinfo 함수를 확인하십시오. 어딘가에 session.save_path가 표시되어야합니다.


PHP 문서에서는 "/ tmp"가 기본값이라고 말하지만 내가 시도한 모든 Linux 배포판은 세션 파일을 넣지 않습니다 /tmp. 소스에서 PHP를 빌드하는 경우입니까? "session.save_path"가 비어 있으면 파일이 어디로 가는지 파악하는 것이 까다로울 수 있습니다 (따라서이 질문은 의심합니다)
Rich

0

현재 session.save_path값 을 찾는 유일한 확실한 옵션 은 항상 phpinfo()세션 저장소 디렉터리를 찾으려는 환경에서 정확히 확인하는 것 입니다.

이유 : 값 session.save_path을 재정의 php.ini하거나 런타임에로 설정 하여 변경되는 모든 종류의 항목이있을 수 있습니다 ini_set('session.save_path','/path/to/folder');. 예를 들어 ISPConfig, Plesk 등과 같은 웹 서버 관리 패널은 종종이를 조정하여 각 웹 사이트에 세션 파일이있는 자체 디렉토리를 제공합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.