Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Куки / Coockie
 
 автор: G-Style   (21.08.2010 в 07:48)   письмо автору
 
 

Проблема в том, что если я устанавливаю куки так:
setcookie('viewed_offers', serialize($viewed_offers), time()+7776000, '/', '', 0);

куки принимает только Opera и IE.

Если я пишу так (добавил домен):
setcookie('viewed_offers', serialize($viewed_offers), time()+7776000, '/', 'domain.ru', 0);

куки принимает только Safari, Firefox, Chrome.

Почему так? И что нужно сделать, чтобы работало во всех браузерах?

Заранее благодарю за ответ!

  Ответить  
 
 автор: sim5   (21.08.2010 в 07:52)   письмо автору
 
   для: G-Style   (21.08.2010 в 07:48)
 

Домен

Для синхронизации cookie-данных с определенным документом (или их группой) браузер определяет домен текущего документа и помещает в cookie-файл записи, соответствующие этому домену. Поэтому, если пользователь собирается просмотреть список всех cookie-данных, содержащихся в свойстве document. cookie, он должен просмотреть все наборы имя-значение, находящиеся в cookie-файле, с именем домена текущего документа. Если пользователь уверен, что документ не будет скопирован на другой сервер в пределах его домена, он может и не использовать параметр domain при сохранении cookie-записей. Автоматическое определение домена текущего документа и занесение его в cookie-файл производится по умолчанию. Необходимо знать, что в формате представления домена должно содержаться по крайней мере две точки.
.mcom.com
.hotwired.corn

В противном случае нужно записать полный URL-адрес домена, включая протокол http://.

*****

А парметр Secure просто опускайте, как и домен (в первой записи).

  Ответить  
 
 автор: G-Style   (21.08.2010 в 08:09)   письмо автору
 
   для: sim5   (21.08.2010 в 07:52)
 

При добавлении домена (пробовал с протоколам, с точкой в начале еще до того как сюда обратился - не помогло) все браузера, кроме IE всех версий, отлично принимают куки. Если удалить домен, то получается выше изложенная ситуация… я могу полагать, что где-то тут моя ошибка, так как всю ночь я не спал, а писал код.

  Ответить  
 
 автор: sim5   (21.08.2010 в 08:13)   письмо автору
 
   для: G-Style   (21.08.2010 в 08:09)
 

Нет никаких проблем с приемом и записей coocies в IE. Может у вас проблемы с браузером/системой? Самое банальное, например, настройки....

PS. Проверьте запись и чтение их из под JavaScript, как в этом случае?

  Ответить  
 
 автор: G-Style   (21.08.2010 в 08:18)   письмо автору
 
   для: sim5   (21.08.2010 в 08:13)
 

Да, настройки тоже пытался менять, вроде не помогает...
До этого момента брал в расчет то, что IE часто преподносит какие-нибудь неожиданности, но если Вы утверждаете, что такого баг в нем нет, то буду искать в другом направлении.

sim5, спасибо Вам большое, что уделили внимание!

  Ответить  
 
 автор: sim5   (21.08.2010 в 08:31)   письмо автору
 
   для: G-Style   (21.08.2010 в 08:18)
 

IE отличается только тем, что может хранить иной максимум записей cookie в отличие от других браузеров.
Есть еще один параметр для cookie, это httpOnly – дополнительный флаг для HTTP-заголовка Set-Cookie, который указывает на запрет чтения/записи данных Cookie посредством JavaScript, отсюда и название: Cookie доступны только через протокол HTTP. Использование httpOnly позволяет веб-разработчикам установить собственную политику безопасности в отношении доступа к Cookie из среды браузера, что по замыслу разработчиков из Microsoft должно помочь в борьбе против XSS-уязвимостей.
Впервые httpOnly был реализован в Internet Explorer 6 SP1 в 2002 году, и с тех времен спецификация практически не претерпела изменений. До сих пор не решена серьезная проблема, ставящая под сомнение безопасность данных Cookie с флагом httpOnly. Речь идет об Ajax и методе XMLHTTPResponse, с помощью которого можно получить доступ к Cookie, используя getAllResponseHeaders()/getResponseHeader().
Некоторые меры были приняты, например, IE7 вырезает существующие Cookie с httpOnly из HTTP-заголовка Cookie, но пока что очень мало браузеров могут противостоять чтению из ответа заголовка Set-Cookie. Среди самых популярных браузеров с httpOnly безопасно работает лишь Opera. Opera вырезает из заголовков весь Set-Cookie, а вот FireFox 3.0.3 и Internet Explorer 7 показывают HTTP-ответ как есть, без какой-либо обработки на предмет наличия Cookie с флагом httpOnly.

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

PS. Только сейчас обратил внимание - serialize($viewed_offers), возможно через чур ваша запись по размеру, в этом может и кроется ваша причина:
Internet Explorer установили ограничение: 20 cookie-записей для каждого домена;
Строка записи (куки это строки) - практический предел: 2 000 символов на пару имя-значение в пределах максимума (4 000 символов для каждой объединенной cookie-записи домена).

  Ответить  
 
 автор: G-Style   (21.08.2010 в 13:26)   письмо автору
 
   для: sim5   (21.08.2010 в 08:13)
 

Нашел ответ!

Все же как всегда оказалось, что это очередной сюрприз от IE. Сюрприз заключается в том, что IE не принимает coockie, если в качестве аргумента-домена передать доменное имя формата xx.yy (в моем случае для теста брался домен ap.us).

sim5, Еще раз вырожаю благодарность!

  Ответить  
 
 автор: sim5   (21.08.2010 в 13:59)   письмо автору
 
   для: G-Style   (21.08.2010 в 13:26)
 

Ерунда какая, вот кука установленная тестом с доменом вами указанном: "tst","test",на 12 часов,"/",".ap.us"
tst
test
~~local~~/C:/Documents%20and%20Settings/UserName/Local%20Settings/Temp/
1088
4245305600
30100150
9350848
30097737
*

Читается в IE и взята с папки его кеша.

А в доменном имени как минимум две точки должно быть.

  Ответить  
 
 автор: G-Style   (21.08.2010 в 15:14)   письмо автору
 
   для: sim5   (21.08.2010 в 13:59)
 

Эта информация со слов человека, который работал в компании Microsoft с IE. По ссылке (http://blogs.msdn.com/b/ieinternals/archive/2009/08/20/wininet-ie-cookie-internals-faq.aspx) можно найти то, о чем я говорю. Но у меня в IE куки не принимает в данном формате. Изменил домен на более длинный – работает как надо. Значит не ерунда.
Точку перед доменным именем все популярные (а может и не только популярные) браузеры ставят по умолчанию, если я не ошибаюсь. Но так или иначе с ней тоже пробовал.

  Ответить  
 
 автор: sim5   (21.08.2010 в 15:17)   письмо автору
 
   для: G-Style   (21.08.2010 в 15:14)
 

Нет не ставят по умолчанию точку браузеры. Почитаем по ссылке, а вообще у меня под IE сохранены и такие куки, как x.x.xx, так что с проблемами формата (длина имени домена) не сталкивался.

  Ответить  
 
 автор: G-Style   (21.08.2010 в 15:34)   письмо автору
 
   для: sim5   (21.08.2010 в 15:17)
 

До сего момента с подобной проблемой я не сталкивался тоже. Очевидно, что это каким-то образом зависит от окружения.

  Ответить  
 
 автор: sim5   (21.08.2010 в 15:37)   письмо автору
 
   для: G-Style   (21.08.2010 в 15:34)
 

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

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования