Vị trí cho các tệp phiên trong Apache / PHP


81

Vị trí mặc định của tệp phiên trên bản cài đặt Apache / PHP trên Ubuntu 10.10 là gì?


12
chỉ cần làm một trang với <?php phpinfo() ?>và tìm kiếm session.save_path.
prodigitalson

1
Normal / tmp (IIRC) nhưng hãy kiểm tra php.ini của bạn cho session.save_path
Mark Baker

Câu trả lời:


79

Giá trị mặc định session.save_path được đặt thành ""sẽ đánh giá thư mục tạm thời của hệ thống của bạn. Xem nhận xét này tại https://bugs.php.net/bug.php?id=26757 nêu rõ:

Giá trị mặc định mới cho save_path trong phần tiếp theo (sic) sắp tới sẽ là chuỗi trống, khiến thư mục tạm thời được kiểm tra.

Bạn có thể sử dụng sys_get_temp_dirđể trả về đường dẫn thư mục được sử dụng cho các tệp tạm thời

Để tìm đường dẫn lưu phiên hiện tại , bạn có thể sử dụng

Tham khảo câu trả lời này để tìm hiểu đường dẫn tạm thời là gì khi hàm này trả về một chuỗi trống.


68
Và từ dòng lệnh chỉ cần thực hiện php -r 'echo session_save_path (), "\ n";'
Richard Ayotte

Vị trí được đặt và không phải là 'mặc định' trong Ubuntu 10.10. Một bản dựng PHP sạch sẽ có thể cung cấp cho bạn điều này, nhưng không phải trong bất kỳ bản dựng Debian / Ubuntu nào mà tôi đã sử dụng. Câu hỏi gốc liên quan đến Ubuntu 10.10. Vì vậy, chỉ cần tra cứu nó trên dòng lệnh cho mỗi nhận xét cuối cùng (hoặc câu trả lời của tôi) vì vị trí có thể khác với 'default' / blank / tmp tùy thuộc vào bản phân phối Linux được sử dụng ..
bshea

4
Cảnh báo!! Tôi nghĩ đang chạy php -r 'echo session_save_path (), "\ n";' như đã đề cập ở trên sẽ sử dụng một tệp php.ini khác (có lẽ /etc/php/7.0/cli/php.ini thay vì /etc/php/7.0/apache2/php.ini) và do đó có thể có giá trị khác là " session.save_path "
Magmatic

@Magmatic là đúng, có hai php.initác phẩm, php_info()sẽ cho bạn biết cái nào là được sử dụng trong eval hiện tại, và locate php.inisẽ giúp bạn tìm thấy chúng
Jonathan

Xin lưu ý (theo 2 nhận xét cuối cùng): Sử dụng phiên bản CLI PHP (dòng lệnh) có thể tạo ra các kết quả khác nhau tùy thuộc vào bản phân phối và biên dịch. Điều chính là nó KHÔNG phải là phiên bản Apache. (Mặc dù các tệp INI có thể giống hệt nhau về đường dẫn phiên). Tốt hơn nên xem / grep Apache PHP.INI thích hợp.
bshea

69

Đầu tiên hãy kiểm tra giá trị của session.save_pathviệc sử dụng ini_get('session.save_path')hoặc phpinfo(). Nếu không trống, thì nó sẽ hiển thị nơi các tệp phiên được lưu. Trong nhiều trường hợp, nó trống theo mặc định, trong trường hợp đó, hãy đọc tiếp:

Trên máy Ubuntu hoặc Debian, nếu session.save_pathchưa được đặt, thì tệp phiên sẽ được lưu vào /var/lib/php5.

Trên hệ thống RHEL và CentOS, nếu session.save_pathkhông được đặt, các tệp phiên sẽ được lưu trong/var/lib/php/session

Tôi nghĩ rằng nếu bạn biên dịch PHP từ nguồn, thì khi session.save_pathkhông được đặt, các tệp phiên sẽ được lưu vào /tmp(mặc dù tôi chưa thử nghiệm điều này).


1
Tôi đang sử dụng Ubuntu 12.04.5 LTS, và đối với một số lý do (Tôi đã không thay đổi bất cứ điều gì trong php.ini) phiên của tôi là dưới/var/lib/php5/sessions
Felipe

"Không được thiết lập"? Nó được thiết lập - nhưng được bình luận trong php.ini. Điều này không có nghĩa là nó không có giá trị hoặc không được 'đặt' .. Từ dòng lệnh chỉ cần thực hiện: php -i | grep session.save_pathcho đường dẫn lưu phiên CLI (và có thể là Apache). Ngoài ra, một đường dẫn đã cho php.inithường sẽ hiển thị đường dẫn 'mặc định' - nó chỉ được nhận xét.
bshea

Và có: nếu không có gì được biên dịch dưới dạng đường dẫn mặc định (không phải trường hợp với hầu hết các bản phân phối), một khoảng trống sẽ được sử dụng (biên dịch mặc định). Sau đó sẽ sử dụng vùng tạm thời của hệ thống (bình thường /tmp) làm giá trị dự phòng / mặc định của nó. Vui lòng tham khảo php.net/manual/en/...
bshea

@bshea, bởi "not set", ý tôi là được đặt thành chuỗi trống
Giàu

DEFAULT Ubuntu 16.04: /etc/php/7.0/*/php.ini-> ;session.save_path = "/var/lib/php/sessions"- Nhận xét không có nghĩa là 'chưa đặt' là tất cả những gì tôi muốn nói. Nó được đặt rõ ràng thành một cái gì đó khác ngoài 'blank' (/ tmp) .. và KHÔNG phải là một chuỗi rỗng / null
bshea

16

Nếu không chắc chắn về mặc định đã biên dịch cho session.save_path, hãy xem phần thích hợp php.ini.
Thông thường, nó sẽ hiển thị giá trị mặc định đã nhận xét.

php.iniVị trí cũ / mới của Ubuntu / Debian
: /etc/php5/apache2/php.ini
Php5 cũ hơn với Apache: Php5 cũ hơn với NGINX + FPM: /etc/php5/fpm/php.ini
Ubuntu 16+ với Apache: /etc/php/*/apache2/php.ini*
Ubuntu 16+ với NGINX + FPM - /etc/php/*/fpm/php.ini*

* /*/= (các) phiên bản PHP hiện tại được cài đặt trên hệ thống.

Để hiển thị phiên bản PHP được sử dụng trong Apache:

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

7.3

Vì PHP 7.3 là phiên bản chạy cho ví dụ này, bạn sẽ sử dụng phiên bản đó cho php.ini:

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

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

Hoặc, kết hợp một lớp lót:

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

Kết quả:

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


Hoặc, sử dụng chính PHP để lấy giá trị bằng môi trường "cli" (xem LƯU Ý bên dưới):

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

Những điều này cũng sẽ hoạt động:

php -i | grep session.save_path

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

GHI CHÚ:

Phiên bản 'cli' (dòng lệnh) php.ini thường có cùng giá trị mặc định như phiên bản Apache2 / FPM (ít nhất là xa session.save_path). Bạn cũng có thể sử dụng một lệnh tương tự để lặp lại cài đặt mô-đun PHP hiện tại của máy chủ web tới một trang web và sử dụng wget / curl để lấy thông tin. Có rất nhiều bài viết về việc phpinfo()sử dụng trong vấn đề này. Tuy nhiên, sẽ nhanh hơn nếu chỉ sử dụng giao diện PHP hoặc grepcho nó một cách chính xác php.iniđể hiển thị giá trị mặc định của nó.

CHỈNH SỬA: Theo bình luận @aesede -> Đã thêm php -i. Cảm ơn


7
Chỉ cần FYI, bạn có thể thực hiện php -itrong CLI để có được phpinfo () tương đương.
aesede

15

Một vị trí mặc định phổ biến khác bên cạnh đó /tmp//var/lib/php5/


Tại sao / var / lib / php5 / không bao giờ ghi được và yêu cầu chmodding / chowning. PHP không nên đặt vị trí phiên có thể ghi theo mặc định?
CMCDragonkai

2
Tôi tưởng tượng nó là như vậy trên máy chủ được chia sẻ những người khác không thể cố gắng chiếm đoạt phiên của mọi người. Tức là, ghi vào phiên nói "tên người dùng: admin" và đặt ID phiên tùy ý, sau đó đặt PHPSESSID thành đó. Sẽ rất dễ dàng để truy cập một cái gì đó như Drupal hoặc Wordpress trên một môi trường máy chủ chia sẻ. (Nó sẽ chỉ đăng nhập bạn với tư cách là tài khoản quản trị)
Mattisdada

4

Tôi đã gặp khó khăn tương tự khi tìm ra đường dẫn chính xác cho các phiên trên máy Mac. Nói chung, tôi phát hiện ra rằng CLI PHP có một thư mục tạm thời khác với mô-đun Apache: Apache được sử dụng /var/tmp, trong khi CLI sử dụng một cái gì đó như thế nào /var/folders/kf/hk_dyn7s2z9bh7y_j59cmb3m0000gn/T. Nhưng cả hai cách, sys_get_temp_dir()đã cho tôi con đường đúng khi session.save_pathtrống rỗng. Sử dụng PHP 5.5.4.


1

Những điều trên không phù hợp với tôi bằng cách sử dụng IUS repo cho CentOS 7 với PHP 7.2:

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

Tuy nhiên, các phiên không được lưu trong /tmpthư mục mà trong /var/lib/php/mod_php/session/thư mục:

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

0

Tôi tin rằng nó trong / tmp /. Tuy nhiên, hãy kiểm tra hàm phpinfo của bạn, nó sẽ nói session.save_path ở đâu đó.


Mặc dù tài liệu PHP nói rằng "/ tmp" là mặc định, nhưng tất cả các bản phân phối linux mà tôi đã thử đều không đưa tệp phiên vào /tmp- bạn có biết cái nào làm được không? Đó là trường hợp nếu bạn xây dựng PHP từ nguồn? Khi "session.save_path" là sản phẩm nào đó có thể được khôn lanh để tìm ra nơi các tập tin đi (vì câu hỏi này, tôi nghi ngờ)
Giàu

0

Tùy chọn chắc chắn duy nhất để tìm session.save_pathgiá trị hiện tại là luôn kiểm tra phpinfo()chính xác môi trường mà bạn muốn tìm ra thư mục lưu trữ phiên.

Lý do: có thể có tất cả các loại thay đổi session.save_path, bằng cách ghi đè php.inigiá trị hoặc bằng cách đặt nó trong thời gian chạy với ini_set('session.save_path','/path/to/folder');. Ví dụ, các bảng quản lý máy chủ web như ISPConfig, Plesk, v.v. thường điều chỉnh điều này để cung cấp cho mỗi trang web thư mục riêng với các tệp phiên.


-8

Tùy thuộc vào loại máy chủ bạn đang chạy, nó có thể khác nhau. Để tìm thư mục, hãy tìm kiếm thông tin sau trong tệp php.ini của bạn.

upload_tmp_dir = "c: / wamp / tmp"

Thư mục có thể khác nhau đối với bạn.


6
Câu hỏi dành cho các tệp phiên, không phải tệp tải lên
Giàu
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.