expire в setcookie()

Camillo

Новичок
expire в setcookie()

Почитал мануал по setcookie(); касательно параметра expire там есть notice
expire is compared to the client's time which can differ from server's time.
Делаю тестовый скрипт (пусть он называется test.php)
PHP:
<?

if (isset($_COOKIE['test'])) {
  echo "I have a cookie";
}
else {
  echo "I don't have a cookie";
  setcookie("test", "test", time()+10);
}

?>
Тестирую в IE, Opera, FF...
В IE захожу на test.php - получаю сообщение I don't have a cookie; рефрешу страницу - получаю I hava a cookie. Рефрешу еще раз - получаю I have a cookie. Рефрешу через 10 сек. (т.к. expire: time()+10) - всё равно получаю I have a cookie. Странно, но куки почему-то не проэкспайрились...
В Opera ситуация такая-же, как и в IE, а вот в FF дела обстоят значительно лучше - там всё работает на ура.

Подскажите пожалуйста - почему куки не экспайрятся куки?

-~{}~ 10.11.07 19:26:

Дополнение: серверное время и локальное время компа на котором тестирую разные.
 

Pigmeich

Новичок
Camillo
Почему-почему, потому что производители браузеров.

Попробуй перезапустить браузеры вместо рефреша, например.

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

Camillo

Новичок
Смог решить свою проблему лишь через запись в саму куку данных time();
И далее оперируя уже ими...
Костыль конечно, но хоть работает...
 

cDLEON

Онанист РНРСlub
Проблема в том, что твой сервер не знает сколько времени у тебя. time()+10 = локальное_время_сервера+10
А ты, например, находишься в другом часовом поясе...Например сервер GMT+3, у тебя локальное время GMT+2 - следовательно кука будет жить на час больше...
 

Nelius

кипарис во дворе
Автор оригинала: cDLEON
Проблема в том, что твой сервер не знает сколько времени у тебя. time()+10 = локальное_время_сервера+10
А ты, например, находишься в другом часовом поясе...Например сервер GMT+3, у тебя локальное время GMT+2 - следовательно кука будет жить на час больше...
Для меня это тоже актуально, пользователи из разных стран авторизуются, получается использовать expire бесполезно?
Выход только такой костыль?
 

cDLEON

Онанист РНРСlub
Почему костыль?
Зачем точно ограничивать время действия куки?
Её нужно изнутри резать.
Ведь куку можно выставить не только через скрипт...
 

Nelius

кипарис во дворе
Вообще у меня в куки храниться только некий hash юзера, который я генерю при логине... И проверяю время последней активности юзера, которое храниться в БД... так что впринципе для меня все же не актуально... Просто интересно было разобраться... Пришло в голову только как вариант что юзер в профиле выставит свою тайм зону, но ориентироваться на это конечно же глупо.
 

Фанат

oncle terrible
Команда форума
Смог решить свою проблему лишь через запись в саму куку данных time();
И далее оперируя уже ими...
молодец!
Костыль конечно
Camillo
Nelius
Что, блин, за дурацкое выражение - костыль?
Это решение проблемы.
Если ты не очень разбираешься в куках и не понимаешь, как они работают, то это не повод называть работающее решение, учитывающее особенность работы кук - костылём.

-~{}~ 11.11.07 07:41:

SiMM
а насколько этот max age совместимм?
 

Pigmeich

Новичок
Отвечу за SiMM

MAX-AGE появился еще в RFC 2109. В 2965 повторили определение со ссылкой. Насколько знаю MAX-AGE = 0 используется для ауентификации "чужой компьютер", так что все подряд браузеры из-за него падать не должны. Слышал про отклонение от правил - MAX-AGE=0 часто дискардят по закрытию браузера.
 
Сверху