Задать вопрос

Большое количество пользователей не присылают установленные куки

Пишу скрипт вывода рекламного баннера на сайт вебмастера. Процесс вывода баннера происходит приблизительно так:

— запрашивается скрипт с моего сайта который создает фрейм на адрес /place.php?param=value… моего сайта
— сервер создает cookie с уникальным именем и вешает их юезеру в ответ на запрос + возвращает код фрейма
— код фрейма собирает необходимые мне данные и выполняет ajax get запрос на адрес /place.php (всегда без параметров — данные пересылаются в кастомных заголовках вида X-Name-Value, так же передается и имя навешанной куки)
— сервер получает этот запрос и пытается прочитать куку по полученному имени.

Вот тут то и возникает проблема. У большого количества юзеров (порядка 12%) сервер при получении ajax get запроса не видит вообще никаких кук. Тобеж не только не видит куку по заданному имени но и массив $_COOKIE пустой. При этом у остальных юзеров все отрабатывает нормально.

Я никак не могу поверить что у 12% пользователей выключены куки — значит проблема в чем то другом. В чем же? Помогите пожалуйста. Код тестировался на сайте с посещаемостью в 12к уникальных посетителей в день. У почти полутора тысяч пользователей выявлена описанная проблема. Юзерагенты не логировались (увы мне, сейчас же начну), зато есть ip адреса.
  • Вопрос задан
  • 3876 просмотров
Подписаться 6 Оценить 1 комментарий
Пригласить эксперта
Ответы на вопрос 6
unconnected
@unconnected
Ходили по этим граблям :)
Скорее всего имеются проблемы с двумя браузерами: Safari и IE.
Для IE есть заклинание, которое нужно послать в заголовок. Вот оно:
Headers.Add(«P3P», «CP=\»IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT\"")
А вот у сафари по-умолчанию параноидальный режим: не брать куки с третьих сайтов. С этим даже Google боролся и нашел лекарство, а вслед получил иск от Apple :)
Суть лекарства в том, чтобы эмулировать ввод данных пользователем в вашем фрейме, тогда Safari считает ваш сайт дружественным.
Ответ написан
StopDesign
@StopDesign
А это может быть результатом работы какой-нибудь популярной баннерорезалки?
Ответ написан
Комментировать
Leestex
@Leestex
Пока что есть одна догадка. Быть может, не все браузеры корректно ставят куки, если не указать все параметры в функции setcookie.
Ответ написан
Комментировать
Elendai
@Elendai
Недавно столкнулся с проблемой в Хроме — то ли не принять, то ли не установить (не помню) куку на другой URI выше по уровню, в рамках одного домена, но не в корень. Т.е. я нахожусь по "/example/com", ставлю куку на "/example", а не тут-то было. Причем в "/" все отлично ставится и считывается.
Возможно у вас как раз Хромисты статистику портят. Проследите за урлами.
Ответ написан
Elendai
@Elendai
Честно говоря, не было времени разбираться в том баг это или фича, но скорее попахивает чрезмерной «безопасностью» у Хрома. Нечего мол ставить туда, куда не положено.
Да и вроде как логично: ребенку тяжело влиять на родителя (подраздел на родительский).

Касаемо сабжа — заинтересовался проблемой (то же такое ждет в ближайшее время), 10 сек гугления и круг замкнулся Хабр, но проблема до конца не решена.

Первая мысль — ставить через js — вызвала усмешку у документации. Значит iframe с формой с autosubmit — наш вариант.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы