Kaavain

Kaavain
Рейтинг
175
Регистрация
28.07.2015
Vladimir #:

Это человеческая лень, ваша. И оправдание для нее🤣

Конечно. Если для входа в автобус надо ногу задрать выше пояса, то нечего пенять на идиотов-конструкторов, это все оправдание лени. 

Короче я решил с другого конца. Подпилил код, чтобы проверка на ботов происходила однократно при первом хите (то есть если юзер принимает куки, то больше не проверять, а хранить сессию - пусть туда попадут и боты, думаю 99% их не принимают куки).

Короче сделал так и все вроде работает, старые сессии не пропали...

$path = $_SERVER['DOCUMENT_ROOT'].'/sessions/'.$_SERVER['HTTP_HOST'];
if (!$_COOKIE['spath']) {
        if (isset($_SERVER['HTTP_USER_AGENT'])) {
                if (!is_bool(stripos($_SERVER['HTTP_USER_AGENT'], 'bot')) ||
                    !is_bool(stripos($_SERVER['HTTP_USER_AGENT'], 'spider')) ||
                    !is_bool(stripos($_SERVER['HTTP_USER_AGENT'], 'Slurp')) ||
                    !is_bool(stripos($_SERVER['HTTP_USER_AGENT'], 'crawler')) ||
                    !is_bool(stripos($_SERVER['HTTP_USER_AGENT'], 'Uptime')) ||
                    !is_bool(stripos($_SERVER['HTTP_USER_AGENT'], 'facebook')) ||
                    !is_dir($path)) {
                        $path = $_SERVER['DOCUMENT_ROOT'].'/sessions/bots';
                }
        }
}
ini_set('session.save_path', $path);
setcookie('spath', '1', time() + (1 * 365 * 24 * 60 * 60), '/');

Но и тут без тупости не обошлось... Часа два бился бошкой почему время жизни куки в РНР установлено на максимум 32-битный, а собака куки смотрю в Эдже- смерть планируется на год+чутьчть! Ломал голову где у меня эта настройка зашира, и тут меня подвел кривой калькулятор онлайн "секунды между датами", который считал неверно. Случайно его закрыл и открыл другой - он насчитал ровно 400 дней, о, умаю, вот уже теплее... И точно! Оказыцца с 2023 (свежак!) года все хромные браузеры не дают установить жизнь куки более 400 дней! Победа.

impossible #:

Я сегодня написал письмо в ТП Яндекса.

Получил ответ:

Предлагаю всем пострадавшим написать также в ТП, может так быстрее поможет решить проблему!!!

Эту бесполезную отписку можно распечатать и повесить на стенку. В случае проблем - смотреть на нее влюбленными глазами. Толк будет тот же.

estic #:

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

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

Вы слишком много внимания уделяете session.save_path 😉

У меня так работает - сессии сайтов по своим папкам, сессии ботов - в помоечную. Иначе арт хранении всех в дефолтной год - распухает донельзя, никаких дисков не хватит. Можно конечно на уровне ОС выбирать те, что с ботовскими признаками и удалять…. Только что пришла в голову эта мысль….

Aisamiery #:

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

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

Они не брошены. Люди думают по неделе-две-месяц и это нормально. 

vitaliy11 #:

)

Интересно что за магазин, где пользователи возвращаются к корзине через некоторое время.

Мне когда-то также не хотелось переделывать свои несколько сайтов с php 5 на следующую версию, так как нужно было изменить и доступ к базе данных и некоторые модули не работали. Но просто сел и переделал по правильному. Может и Вам переделать на нормальную логику, как писали выше?

У меня время жизни корзины - год. Возврат к корзине через месяц - не редкость. Иногда возвращаются даже больше, чем через год. Правда такие случаи исчезающие редки. 

Так, сам острю - сам смеюсь. У меня всегда так - пока тут (или не тут, но тут позориться не так страшно) пишу, приходит в голову такая редкость, как умная мысль...

1. При каждом хите идет обращение к index.php и это всегда как в первый раз, тут ниче не попишешь, Апач или Нгинкс (уж не знаю кто) не может знать прошлого... 

2. Соответственно при каждом хите session.save_path дефолтный, а именно /var/www/user/data/tmp если панель ISPmanager (всеми силами стараюсь слезть с этой иглы) или FastPanel (отличная штука). И без ini_set('session.save_path', $path); ничего не поделать.

3. Чтобы избежать при каждом хите if (юзерагент?){$path} + ini_set('session.save_path', $path);  что я и хочу - юзать (неправильно мною используемые) сессии нельзя, так как массив $_SESSION[] пуст до session_start();  , а чтение из файла получается сложно и медленно.

4. Рабочий вариант должен быть такой: писать в куки скажем либо безликое $sesspath = 1(2,3,4,...) получаемое при первом хите и при всех хитах читать его и if(!$sesspath) { if (юзерагент?){$path} + ini_set('session.save_path', $path); } либо писать туда сразу весь  $path но мне кажется это не принято, так как в юзера в куках будет уже не безликая информация, а конкретика.

5. П.4 не должен сбоить, ибо если умерла кука у юзера, то и корзина обнулилась и вообще шефвсепропало.

6. Бонусная игра: а может вообще еще и  session_start();  заменить на if(! $_SESSION[]){ session_start(); } раз пошла такая пьянь??? UPD: не имеет смысла, так как повторный вызов ничего не делает, а варнинги у меня отключены.

Скажите мне, я мегахакер или опять что не понял?

По существу - явно пилит бэкапы. Пройтись в консоли поиском файлов более 1мб и временем создания нужным. 

Бэкапы могут под рутом делаться, а настройки - под рядовым смотришь 

Но на Hestia все равно перейти!
1. Перейти на Hestia, это очень просто, ибо форк. Но в отличие от Весты - живой. 
2. Наблюдать, скорее пройдет. 
Всего: 1291