Как уменьшить огромное количество файлов сессий?

Rooner

Новичок
При заходе на сайт/страницу через браузер, с помощью session_start() создается сессия и далее все данные записываются в нее и хранятся в 1 файле в течении 3 суток.
Но когда заходит робот яндекса/гугла, или производится сканирование сайта, то для каждого запроса создается отдельная сессия с отдельным файлом. В результате чего образуются миллионы файлов сессий.
По идее если сократить время жизни сессий, то это уменьшит количество файлов, но делать это нельзя т.к. снизит удобство сайта.
Что можно сделать в данном случае, чтобы сократить количество файлов сессий?
Может как-то принудительно указывать id сессии, чтобы все запросы робота обращались к 1му файлу сессии?
 

Фанат

oncle terrible
Команда форума
Можно детектить бота и не стартовать для него сессию
Можно стартовать сессию только покупателям и авторизованным пользователям.
Можно не записывать в сессию "все данные", а спокойно подтягивать их из базы и вместо раздутых сессий просто авторизовывать по куке .
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
просто не стартовать сессию для пользователей без куки PHPSESSID
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
кука - это заголовок запроса, приходит из браузера перед стартом работы скрипта и парсится в $_COOKIES при первом обращении к массиву,
ее можно проверить по isset($_COOKIES['PHPSESSID']), а session_start() - это синтаксический сахар для set_cookie() и file_get_contents(), ее можно вызвать просто при успешной аутентификации (аутентификация - проверка логина и пароля или идентификация через соцсети)
 
Последнее редактирование:

Фанат

oncle terrible
Команда форума
это заголовок запроса, приходит из браузера
а в браузере он откуда возьмется, если
не стартовать сессию для пользователей без куки
— Ты где деньги берешь?
— В тумбочке?
— А кто в тумбочку деньги ложит?
— Жена!
— А у нее деньги от куда?
— Я ей даю!
— А у тебя откуда?
— Да из тумбочки же!

Гриша, мне кажется weregod резонную поправку сделал, а ты зря кричишь
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
убрал эмоционирование :)
сессию после авторизации пущать не получится, для авторизации нужно знать пользователя,
надо при аутентификации: сделать запрос по логину-паролю можно без сессии, потом провести авторизацию на право логиниться, и по результату авторизации создать сессию
 

Rooner

Новичок
Благодарю за советы, пригодятся в будущем, а пока что применил альтернативное решение - добавил в robots.txt исключение для бота semrush. Соответственно теперь бот не заходит и для него не создается миллион файлов сессий.
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
А что если твой робот будет игнорировать просто напросто этот файл?
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Вообще вопрос был к ТС, и думать надо наперед, а не латать дырки, когда они уже появились и судно тонет
 

Фанат

oncle terrible
Команда форума
Вообще вопрос был к ТС, и думать надо наперед, а не латать дырки, когда они уже появились и судно тонет
Ну с одной стороны ты прав и лучше бы сделать на уровне пхп.
С другой - не настолько серьёзная проблема, а геморроя с правкой старта сессии под юзерагент может быть много.
Вот ты навскидку можешь сказать, как это сделать в ларавели, например?
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
Вот ты навскидку можешь сказать, как это сделать в ларавели, например?
прости, но, не зная ларавель, нашел в доке и набрал менее, чем за 15 минут

PHP:
public function boot()
{
        Session::extend('conditional', function ($app) {
            // Return implementation of SessionHandlerInterface...
            return empty($_COOKIE('PHPSESSID'))? new ArraySessionHandler ? new FileSessionHandler;
        });
}
только не надо сессию запускать по autostart
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Ну с одной стороны ты прав и лучше бы сделать на уровне пхп.
С другой - не настолько серьёзная проблема, а геморроя с правкой старта сессии под юзерагент может быть много.
Вот ты навскидку можешь сказать, как это сделать в ларавели, например?
Даже представлять не буду, я тут мультидоменный сайт пилю на L, сессии это была боль.

Напрямую варик выше - не рабочий, надо сильно копать. От сессий зависит еще миддлварь для ошибок и csrf токенов. @Adelf скажет точнее, он в ларке больше сечет.
 

флоппик

promotor fidei
Команда форума
Партнер клуба
Почему у меня все работает как правило? :( даже поныть не о чем
 

AmdY

Пью пиво
Команда форума
Там же есть SessionServiceProvider, там подменяешь драйвер по условию, никакой магии, особенно с фасадами.

Только с чего вы взяли что у него Laravel, а не какой-нибудь древний самопис с session_start в каждом скрипте. Чёт последнее в каждом вопросе новичков какие-то гиперусложнения, тащим фреймворки, орм, ddd, docker
 
Последнее редактирование:

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Нету в семерке провайдера такого изначально)

PS: Да, можно создать и зарегить, но лично у меня напрямую это не взлетело, за те минут 5-10, что я пробовал. Больше времени на тесты нету пока)
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Кстати вот да, со стороны миддлваря я не заходил
 
Сверху