Lokalizacja plików sesji w Apache / PHP

81

Jaka jest domyślna lokalizacja plików sesji podczas instalacji Apache / PHP w systemie Ubuntu 10.10?

cambraca
źródło
12
po prostu zrób stronę z <?php phpinfo() ?>i poszukaj session.save_path.
prodigitalson
1
Zwykle / tmp (IIRC), ale sprawdź swój php.ini pod kątem session.save_path
Mark Baker,

Odpowiedzi:

79

Wartością domyślną session.save_path jest to, ""które będzie oceniane w katalogu tymczasowym twojego systemu. Zobacz ten komentarz na https://bugs.php.net/bug.php?id=26757 stwierdzający:

Nowym domyślnym parametrem save_path w nadchodzącym wydaniu (sic) będzie pusty ciąg, który spowoduje sondowanie katalogu tymczasowego.

Możesz użyć, sys_get_temp_diraby zwrócić ścieżkę katalogu używaną dla plików tymczasowych

Aby znaleźć ścieżkę zapisu bieżącej sesji, możesz użyć

Zapoznaj się z tą odpowiedzią, aby dowiedzieć się, jaka jest ścieżka tymczasowa, gdy ta funkcja zwraca pusty ciąg.

Gordon
źródło
68
Z linii poleceń po prostu wykonaj php -r 'echo session_save_path (), "\ n";'
Richard Ayotte
Lokalizacja jest ustawiona, a nie „domyślna” w systemie Ubuntu 10.10. Czysta kompilacja PHP może ci to dać, ale nie pod żadnymi wersjami Debian / Ubuntu, z których korzystałem. Pytanie orig dotyczy Ubuntu 10.10. Po prostu wyszukaj to w wierszu poleceń na ostatni komentarz (lub moją odpowiedź), ponieważ lokalizacja może różnić się od 'default' / blank / tmp w zależności od używanej dystrybucji Linuksa ..
bshea
4
Ostrzeżenie!! Myślę, że uruchomienie php -r 'echo session_save_path (), "\ n";' jak wspomniano powyżej, użyje innego pliku php.ini (być może /etc/php/7.0/cli/php.ini zamiast /etc/php/7.0/apache2/php.ini) i dlatego może mieć inną wartość „ session.save_path "
Magmatic
@Magmatic ma rację, są DWA php.inipliki, php_info()powiedzą ci, który z nich jest używany podczas bieżącej ewaluacji i locate php.inipomogą ci je znaleźć
Jonathan
Uwaga (zgodnie z 2 ostatnimi komentarzami): Korzystanie z wersji CLI PHP (wiersz poleceń) może dać różne wyniki w zależności od dystrybucji i kompilacji. Najważniejsze jest to, że NIE jest to wersja Apache. (Chociaż pliki INI mogą być identyczne, jeśli chodzi o ścieżki sesji). Lepiej zajrzeć do odpowiedniego pliku PHP.INI Apache w / grep.
bshea
69

Najpierw sprawdź wartość session.save_pathużycia ini_get('session.save_path')lub phpinfo(). Jeśli to nie jest puste, pokaże, gdzie są zapisane pliki sesji. W wielu scenariuszach jest domyślnie pusty, w takim przypadku przeczytaj:

Na maszynach Ubuntu lub Debian, jeśli session.save_pathnie jest ustawione, pliki sesji są zapisywane w formacie /var/lib/php5.

W systemach RHEL i CentOS, jeśli session.save_pathnie jest ustawione, pliki sesji będą zapisywane w formacie/var/lib/php/session

Myślę, że jeśli kompilujesz PHP ze źródła, to gdy session.save_pathnie jest ustawione, pliki sesji będą zapisywane w /tmp(chociaż sam tego nie testowałem).

Bogaty
źródło
1
Używam Ubuntu 12.04.5 LTS iz jakiegoś powodu (nic nie zmieniłem php.ini) moje sesje są nieaktualne/var/lib/php5/sessions
Felipe
"Nie ustawiony"? Jest ustawiony - ale zakomentowany w php.ini. Nie oznacza to, że nie ma wartości lub nie jest „ustawione”. Z linii poleceń po prostu wykonaj: php -i | grep session.save_pathścieżkę zapisu sesji dla CLI (i prawdopodobnie Apache). Ponadto dana php.ininormalnie pokaże `` domyślną '' ścieżkę - jest po prostu zakomentowana.
bshea
I tak: jeśli nic nie zostało wkompilowane jako ścieżka domyślna (nie dotyczy to większości dystrybucji), zostanie użyty pusty element (domyślnie kompilacja). Który następnie użyje obszaru tymczasowego systemu (normalnie /tmp) jako wartości rezerwowej / domyślnej. Proszę odnieść się do php.net/manual/en/…
bshea
@bshea, przez „nie ustawiono”, miałam na myśli ustawiony na pusty ciąg
Rich
DOMYŚLNIE Ubuntu 16.04: /etc/php/7.0/*/php.ini-> ;session.save_path = "/var/lib/php/sessions"- Komentarz nie oznacza, że ​​mam na myśli tylko „nieustawione”. Mieści się on oczywiście do czegoś innego niż BLANK (/ tmp) .. i nie jest pustym / null łańcuch
bshea
16

Jeśli nie masz pewności co do skompilowanego domyślnego dla session.save_path, spójrz na odpowiedni plik php.ini.
Zwykle spowoduje to wyświetlenie zakomentowanej wartości domyślnej.

Stare / nowe php.inilokalizacje Ubuntu / Debian :
Starsze php5 z Apache: /etc/php5/apache2/php.ini
Starsze php5 z NGINX + FPM: /etc/php5/fpm/php.ini
Ubuntu 16+ z Apache: /etc/php/*/apache2/php.ini*
Ubuntu 16+ z NGINX + FPM - /etc/php/*/fpm/php.ini*

* /*/= bieżące wersje PHP zainstalowane w systemie.

Aby wyświetlić wersję PHP używaną w Apache:

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

7.3

Ponieważ PHP 7.3 jest wersją działającą w tym przykładzie, użyłbyś jej do php.ini:

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

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

Lub połączona jednowarstwowa:

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

Wynik:

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


Lub użyj samego PHP do pobrania wartości za pomocą środowiska "cli" (zobacz UWAGA poniżej):

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

Będą też działać:

php -i | grep session.save_path

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

UWAGA:

Wersja „cli” (wiersz poleceń) ma php.ini zwykle te same wartości domyślne, co wersje Apache2 / FPM (przynajmniej jeśli chodzi o session.save_path). Możesz również użyć podobnego polecenia, aby wyświetlić na stronie internetowej aktualne ustawienia modułu PHP serwera WWW i użyć wget / curl do pobrania informacji. Istnieje wiele postów dotyczących phpinfo()wykorzystania w tym zakresie. Ale szybciej jest po prostu użyć interfejsu PHP lub greppoprawnie php.iniwyświetlić jego wartość domyślną.

EDYCJA: Per @aesede komentarz -> Dodano php -i. Dzięki

bshea
źródło
8
Po prostu FYI, możesz zrobić php -iw CLI, aby uzyskać odpowiednik phpinfo ().
aesede
15

Oprócz tego inną popularną lokalizacją domyślną /tmp/jest/var/lib/php5/

Kevin Borders
źródło
Dlaczego plik / var / lib / php5 / nigdy nie jest zapisywalny i wymaga chmodding / chowning. Czy PHP nie powinno ustawiać lokalizacji sesji, która jest domyślnie zapisywalna?
CMCDragonkai
2
Wyobrażam sobie, że na współdzielonych hostach inni ludzie nie mogą próbować przechwytywać sesji ludzi. To znaczy napisz do sesji, mówiąc „nazwa użytkownika: admin” i ustawiając dowolny identyfikator sesji, a następnie ustawiając PHPSESSID na to. Bardzo łatwo byłoby uzyskać dostęp do czegoś takiego jak Drupal lub Wordpress na współdzielonym środowisku hosta. (Po prostu zalogujesz się jako konto administratora)
Mattisdada
4

Miałem ten sam problem ze znalezieniem prawidłowej ścieżki dla sesji na komputerze Mac. W sumie dowiedziałem się, że CLI PHP ma inny katalog tymczasowy niż moduł Apache: używany jest Apache /var/tmp, podczas gdy CLI używa czegoś podobnego /var/folders/kf/hk_dyn7s2z9bh7y_j59cmb3m0000gn/T. Ale obie strony sys_get_temp_dir()dały mi właściwą ścieżkę, gdy session.save_pathjest pusta. Korzystanie z PHP 5.5.4.

themarketka
źródło
1

Żadne z powyższych nie działało dla mnie przy użyciu repozytorium IUS dla CentOS 7 z 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

Jednak sesje nie zostały zapisane w /tmpfolderze, ale w /var/lib/php/mod_php/session/folderze:

ls /var/lib/php/mod_php/session/
> sess_3cebqoq314pcnc2jgqiu840h0k  sess_ck5dtaerol28fpctj6nutbn6fn  sess_i24lgt2v2l58op5kfmj1k6qb3h  sess_nek5q1alop8fkt84gliie91703
> sess_9ff74f4q5ihccnv6com2a8409t  sess_dvrt9fmfuolr8bqt9efdpcbj0d  sess_igdaksn26hm1s5nfvtjfb53pl7  sess_tgf5b7gkgno8kuvl966l9ce7nn
Tim
źródło
0

Wierzę, że jest w / tmp /. Sprawdź jednak swoją funkcję phpinfo, powinna gdzieś tam być session.save_path.

profitphp
źródło
Chociaż dokumentacja PHP mówi, że "/ tmp" jest domyślnym, wszystkie dystrybucje Linuksa, których próbowałem, nie umieszczają plików sesji /tmp- czy znasz jakieś, które to robią? Czy tak jest, jeśli budujesz PHP ze źródła? Gdy „session.save_path” jest pusta, może być trudno ustalić, gdzie znajdują się pliki (stąd to pytanie, jak podejrzewam)
Rich
0

Jedyną pewną opcją znalezienia bieżącej session.save_pathwartości jest zawsze sprawdzenie phpinfo()dokładnie w środowisku, w którym chcesz znaleźć katalog przechowywania sesji.

Przyczyna: mogą się zmienić różne rzeczy session.save_path, albo przez nadpisanie php.iniwartości, albo ustawienie jej w czasie wykonywania za pomocą ini_set('session.save_path','/path/to/folder');. Na przykład panele zarządzania serwerem WWW, takie jak ISPConfig, Plesk itp., Często dostosowują to, aby nadać każdej witrynie własny katalog z plikami sesji.

taniusz
źródło