Подтвердить что ты не робот

Расположение файлов сеансов в Apache/PHP

Каково местоположение файлов сеансов по умолчанию при установке Apache/PHP на Ubuntu 10.10?

4b9b3361

Ответ 1

Параметр session.save_path умолчанию имеет значение "" которое будет соответствовать вашему системному временному каталогу. Посмотрите этот комментарий на https://bugs.php.net/bug.php?id=26757, заявив:

Новое значение по умолчанию для save_path в предстоящем выпуске (sic) будет пустой строкой, которая вызывает проверку временного каталога.

Вы можете использовать sys_get_temp_dir чтобы вернуть путь к каталогу, используемый для временных файлов

Чтобы найти текущий путь сохранения сеанса, вы можете использовать

Обратитесь к этому ответу, чтобы узнать, каков временный путь, когда эта функция возвращает пустую строку.

Ответ 2

Сначала проверьте значение 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 (я не тестировал это сам, хотя).

Ответ 3

Другим общим положением по умолчанию, кроме /tmp/, является /var/lib/php5/

Ответ 4

Если вы не уверены в скомпилированных настройках по умолчанию, посмотрите соответствующий php.ini.
Обычно это покажет закомментированное значение по умолчанию.

Ubuntu/Debian старые/новые местоположения php.ini:
Более /etc/php5/apache2/php.ini php5 с Apache: /etc/php5/apache2/php.ini
Более старый php5 с NGINX + FPM: /etc/php5/fpm/php.ini
Ubuntu 16+ с Apache: /etc/php/*/apache2/php.ini
Ubuntu 16+ с NGINX + FPM - /etc/php/*/fpm/php.ini

/*/= ваша текущая версия PHP модуля, используемого на вашем веб-сервере.

Вам необходимо выяснить, какая версия PHP используется, а затем найти соответствующую запись php.ini:

Одна строка (более новая версия Ubuntu/Deb):

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"

Или же:

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

7.3

Поскольку PHP 7.3 является версией, работающей на веб-сервере Apache, вы должны использовать ее:

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

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

Или через командную строку /"cli" (см. Примечание ниже):

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

или же:

php -i | grep session.save_path

или же:

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

НОТА:

Версия "cli"/php.ini для командной строки обычно совпадает с версией Apache/FPM по сравнению с настройками пути сеанса. Вы также можете использовать аналогичную команду, чтобы отобразить настройку Apache/Nginx для команды или веб-страницы wget/curl. Но его так же легко найти в надлежащем Apache или FPM php.ini чтобы гарантировать, что вы видите правильный путь сеанса.

РЕДАКТИРОВАТЬ: За комментарий @aesede → Добавлен php -i. Спасибо

Ответ 5

У меня была такая же проблема, как найти правильный путь для сеансов на Mac. В целом, я узнал, что CLI PHP имеет другую временную директорию, чем модуль Apache: Apache использовал /var/tmp, в то время как CLI использовал что-то вроде /var/folders/kf/hk_dyn7s2z9bh7y_j59cmb3m0000gn/T. Но в обоих случаях sys_get_temp_dir() получил правильный путь, когда session.save_path пуст. Использование PHP 5.5.4.

Ответ 6

Я верю в /tmp/. Проверьте свою функцию phpinfo, но она должна сказать session.save_path где-то там.

Ответ 7

В зависимости от типа сервера, который вы используете, он может меняться. Чтобы найти каталог, выполните поиск следующих файлов php.ini.

upload_tmp_dir = "c:/wamp/tmp"

Каталог может отличаться для вас.