Удаление файлов сессий Magento

8

Папка var / session постоянно хранит очень большое количество данных, что вызывает большое использование innode на сервере,

каждый раз, когда я удаляю файлы из папки сессии, использование innode падает до минимума.

поэтому я хочу спросить, как я могу автоматически удалять эти файлы сеанса, например, каждые 24 часа.

Я только начал работать с MAgento, поэтому я немного новичок, поэтому большое объяснение будет оценено.

я знаю, что должен как-то создать работу cron через cpanel или smt.

Андрюс
источник

Ответы:

2

Если вы используете задание cron для удаления всех сеансов, вы удалите все корзины покупок, и люди покинут ваш сайт.

Я предлагаю вам взглянуть на файлы сессий и посмотреть, не выглядят ли они подозрительно.

Попробуйте проверить, откуда IP-адреса ваших посетителей: https://www.iplocation.net/

Если, например, вы обнаружите несколько IP-адресов на китайском языке, а ваш веб-сайт не является китайским, это, вероятно, боты, которые тратят вашу пропускную способность. Вы должны заблокировать их диапазоны IP-адресов в настройках Apache или в .htaccess.

(Я полагаю, что вы можете даже выполнять фильтрацию по странам в Apache, но я думаю, что это замедляет время отклика. Я этого не пробовал.)

Magento 1.x (не уверен в 2.x) также, похоже, содержит ошибку, из-за которой он создает новый сеанс для каждого запроса, когда клиент не принимает куки. Таким образом, такие боты, как Googlebot, Bingbot, SemrushBot и другие, генерируют огромное количество файлов сессий.

Для моего сервера единственное, что мне нужно было сделать, это избавиться от этих файлов сессий бота. Пока у меня нет времени найти и исправить ошибку Magento, у меня есть скрипт оболочки, запущенный cron для удаления всех файлов сеанса, содержащих эти строки:

  • Googlebot
  • bingbot
  • паук
  • SEMrush
  • AhrefsBot
  • UptimeRobot
  • spbot
Баттл Буткус
источник
Вы нашли решение, чтобы исправить ошибку? Я только что удалил более 1,2 млн. Файлов, что просто смешно.
Марко
Первоначально сценарий bash, который я написал для очистки файлов, работал отлично, но шаблоны постоянно меняются, поэтому требуется много работы по обслуживанию. Поэтому я планирую покопаться в коде и найти реальное решение. Код должен проверять, принимает ли клиент куки (потому что боты их не принимают), а НЕ создавать сеанс для этих клиентов.
Баттл Буткус
Не могли бы вы поделиться кодом, если вы сделали? На данный момент у нас есть проблема только с M2E Pro, Google и Bing. Эти три вещи создают кучу файлов сессий.
Марко
1

Вместо использования пользовательских сценариев, было бы более разумно просто объяснить PHP для вас, указав правильные значения в вашем php.iniфайле. Если вы уверены, что оно session.gc_maxlifetimeимеет относительно небольшое значение (но> = время ожидания вашего сеансового файла cookie), например, 1440, и session.gc_probabilityустановлено в 1, то встроенный сборщик мусора сеанса PHP должен удалить файлы за вас.

Питер О'Каллаган
источник
как я могу изменить их, если я не могу найти файл php.ini в каталоге Magento ftp. я попытался создать файл test.php и установить эти значения с помощью ini_set, но строки меняют свои значения. пожалуйста, помогите
Андрюс
Это не работает, у вас были какие-то другие решения? Пожалуйста, помогите
Дженит Самуэль
Просто создайте файл с именем phpinfo.php внутри ftp-каталога Magento и поместите «phpinfo ();». Затем попробуйте загрузить его в браузер, и вы узнаете, где именно находится php.ini на вашем сервере. Тогда, вероятно, вы можете легко внести эти изменения.
Ашеем Патро
В моем случае боты могут создавать тысячи новых сессий в час. Но мы хотим, чтобы реальные сессии клиентов длились недели или больше. Таким образом, очистка сессии с помощью PHP не является ответом. Magento должен проверить, что клиент принимает куки (и / или проверить, является ли клиент ботом) перед созданием сеанса, вместо того, чтобы создавать новый сеанс для каждой загрузки страницы, которая не отправила куки.
Баттл Буткус
1

Magento сохраняет данные сеанса клиента в папке var / session, если вы удалите эту папку, она удалит все данные сеанса клиента

Давайте предположим, что один из ваших гостевых клиентов добавил 3 продукта в корзину, если вы удалите данные сеанса, он удалит все 3 продукта из корзины, и это будет плохим опытом для клиента, вместо удаления данных сеанса вы можете сохранить сеанс в базе данных.

Чтобы использовать базу данных для хранения сеанса, просто поместите ее в ваш файл / etc / local.xml :

<session_save><![CDATA[db]]></session_save>

или вы можете использовать сеанс redis / кэш Memcached для сохранения данных в кэш redis / Memcached Session

Чтобы использовать хранилище сессий memcached в Magento, вы должны иметь это в своем приложении / etc / local.xml :

<session_save><![CDATA[memcache]]></session_save>
<session_save_path><![CDATA[tcp://localhost:11211?persistent=1&weight=2&timeout=10&retry_interval=10]]></session_save_path>

Для получения дополнительной информации о хранении сессии посетите эту ссылку

Вайбхав Ахалпара
источник
0

Одним из решений является то, что вы можете создать задание cron, которое запускается один раз в день, чтобы удалить нужные файлы.

Здесь вы можете увидеть, как настроить работу cron: /ubuntu/2368/how-do-i-set-up-a-cron-job

учебник cpanel для cronjob: http://support.hostgator.com/articles/cpanel/how-do-i-create-and-delete-a-cron-job

Вы можете создать скрипт bash или php, который будет выполнять операцию удаления файлов. И поместите этот скрипт в cron, чтобы он выполнялся в 3 или 4 часа по времени сервера, когда сервер используется меньше. Чтобы проверить, работает ли скрипт, вы можете запустить его вручную.

Никола
источник
0

Создайте sh файл в корне документа. Поместите ниже код внутри него.

 #!/bin/bash
 # Shell script for cleaning session
 path=your document_root path goes here
 cd $path
 rm -rf var/session/*

изменить путь с вашим путем document_root без кавычек. Запустите этот код, когда количество посещений сайта меньше.

СДЕЛАННЫЙ!!

Шьям Кришна Срикумар
источник
это работает для меня rm -rf var / session / *
Alam Zaib
Это также убивает все активные сессии
Кевин Кригер