Problemy z PHP 5.3 i folderem sesji


81

Niedawno zaktualizowałem do PHP 5.3 i od tego czasu otrzymuję (sporadyczne) komunikaty o błędach, które wskazują, że Apache (lub może być czystszym z plików sesji) nie ma uprawnień do folderu, w którym przechowywane są sesje.
Dzieje się to losowo i nie można go odtworzyć z dokładnymi krokami, co doprowadziło mnie do wniosku, że jest to czystsze sesje.
Czy ktoś ma jakieś doświadczenie z takimi błędami?

Komunikat o błędzie (który jest uruchamiany w session_start()linii) to:

ps_files_cleanup_dir: opendir (/ var / lib / php5) failed: Odmowa uprawnień.

ls -ltr w katalogu sesji daje:

drwx-wx-wt  2 root          root          4096 2010-05-25 12:39 php5

W tym katalogu widzę pliki sesji należące do www-data, czyli mojego Apache, a aplikacja działa dobrze. Co sprawia, że ​​zastanawiam się, pod jakim użytkownikiem działa sesja GC?


Zrobiłem, ale nie w 5.3. Okazało się, że był to błąd uprawnień, który przefiltrował do ścieżki zapisu sesji. Zakładam, że sprawdziłeś uprawnienia?
— Jarrod Nettles

@Jarrod Widzę, że dane www mogą czytać i zapisywać w tym folderze (który ma teraz w & r dla każdego, użytkownika, grupy i świata). Czy powinienem sprawdzić coś innego?
— Itay Moav -Malimovka

Domyślam się, że powodem, dla którego zdarza się to sporadycznie, jest to, że błąd występuje, gdy uruchomiony jest moduł odśmiecania sesji, który, jak sądzę, ma domyślnie 1% szansy uruchomienia na inicjalizację sesji. Czy wprowadziłeś jakieś zmiany w php.ini dotyczące sesji? Co jest poza wartością domyślną? Sprawdź właściciela folderu sesji, po czym nie widzę pliku .ini ani błędów.
— Jarrod Nettles

Właścicielem jest root, sesje są tworzone przez www-data, każdy ma dostęp do tego folderu. Przejdę kolejno po ustawieniach ini, poszukam czegoś podejrzanego.
— Itay Moav -Malimovka

ps_files_cleanup_dir: opendir (/ var / lib / php5) failed: Permission denied (
— Itay Moav -Malimovka

Odpowiedzi:


121

Poprawka: w Twoim php.inizestawie session.gc_probabilitydo0

Przyczyna, jak sądzę, znalazłem tutaj http://somethingemporium.com/2007/06/obscure-error-with-php5-on-debian-ubuntu-session-phpini-garbage

Zasadniczo, czyszczenie pamięci jest skonfigurowane do wykonywania zadań cron w niektórych systemach (np. Ubuntu / Debian). Niektóre pliki wykonywalne php ini, takie jak php-cli, również próbują usuwać elementy bezużyteczne, co skutkuje wyświetlanym błędem.


6
Ten problem występuje również w systemie Ubuntu 10.04, ale po sprawdzeniu pliku php.ini, który znalazłem, jest session.gc_probabilityjuż ustawiony 0.
— Jonathan,

5
@Jonathan - Prawdopodobnie zauważysz, że Twoja aplikacja ustawia wtedy wartość.
— SynackSA,

3
@SynackSA Co dziwne, to kiedy utworzyć niestandardowy, Miejsce konkretny plik php.ini, to gdy session.gc_probabilitywyzwalacze do 1. To zdarzyło się nawet, gdy nie ma żadnych ustawień w pliku php.ini w ogóle ! Używam Suphp na Ubuntu, Apache 2.2. Zastanawiam się, czy to jakiś błąd. W każdym razie dodanie session.gc_probability = 0do mojego niestandardowego, specyficznego dla witryny pliku php.ini wydaje się rozwiązać problem.
— Jonathan,

2
@Jonathan Tak to powinno działać, ponieważ domyślna wartość to 1
— ROunofF

2
To wyłącza czyszczenie pamięci sesji. Prawdopodobnie powinieneś chcieć sprawdzić, czy rzeczywiście istnieje cron czyszczący twoje sesje.
— hansgoed

23

Wydaje się, że jest to typowy błąd na serwerach Ubuntu (używam Lucid LTS). Są tam domyślne uprawnienia katalogu / var / lib / php5

drwx-wx-wt  2 root     root     4096 2011-11-04 02:09 php5

więc można go zapisać, ale nie odczytać przez serwer WWW, myślę, że to wyjaśnia błędy.

Ponieważ Ubuntu ma własne czyszczenie śmieci za pomocą cron ( /etc/cron.d/php5), prawdopodobnie najlepiej jest wyłączyć wyrzucanie śmieci w php, jak zasugerował powyżej Diwant Vaidya.

session.gc_probability = 0

W rzeczywistości istnieje powód, dla którego folder sesji nie powinien być czytelny dla świata - jak mówi Podręcznik PHP :

Jeśli pozostawisz to ustawienie w katalogu do odczytu dla wszystkich użytkowników, takim jak / tmp (ustawienie domyślne), inni użytkownicy na serwerze mogą być w stanie przejąć sesje, pobierając listę plików w tym katalogu.


2

Rozwiązaniem, którego obecnie używam (które nie jestem pewien, jest właściwe), jest przekazanie prawa własności do folderu sesji użytkownikowi Apache (w moim przypadku dane www).


2
Jak Marie wspomina powyżej, może to spowodować problem z bezpieczeństwem na dowolnym serwerze produkcyjnym.
— Kzqai,

2
Już dawno
— wdrożyłem

1
@pike Czyszczenie sesji jest obsługiwane przez php cli przez CRON
— Itay Moav -Malimovka

1

Ten problem niepokoi mnie od jakiegoś czasu. Zmieniłem wartość zgodnie z sugestią w php.ini i problem nadal występował. Znalazłem tę samą wartość konfiguracyjną w moim index.php, a także private / Zend / session.php. Warto więc przyjrzeć się nieco głębiej, jeśli problem nadal występuje. Mam nadzieję, że komuś się to przyda.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.