Forum Webscript.Ru
Программирование => Теория, алгоритмы и стандарты => Тема начата: Forza от 30 Октября 2004, 13:47:24
-
Проясните мне, пожалуйста, следующую ситуацию.
На сайте введена система регистрации и авторизации посетителей, информация о сеансе поддерживается через куки. Т.е. если человек зашёл гостём, то после закрытия окна кука прибивается, и в следующий заход этого человека он воспринимается скриптом как новый гость. А если человек зарегистрировался и сказал, чтобы его помнили, то ему будет дана "вечная" кука.
Я решил написать простенькую систему учёта доступа к сайту и для этого завёл ещё одну всегда "вечную" куку, которая записывается юзеру при первом посещении сайта.
Итак, когда человек заходит гостём, ему даются 2 куки: "вечная" и кука сеанса, существующая до закрытия окна.
Set-Cookie: seans=someID1;
Set-Cookie: first_session=someID1; expires=Tue, 28-Oct-2014 09:26:56 GMT (path и domain для краткости опускаю, someIDi - на практике длинные числа)
После закрытия окна в системной папке виндов Cookies сохраняется, естественно, только вечная кука в файле fileName[1].
Когда он снова зайдёт как гость, а потом авторизуется, ему пришлют 2 вечные куки.
Set-Cookie: seans=someID2; expires=Tue, 28-Oct-2014 09:27:30 GMT
Set-Cookie: first_session=someID1; expires=Tue, 28-Oct-2014 09:27:30 GMT.
Теперь начинается непонятное для меня. После закрытия окна в папку Cookies добавляется файл fileName[2] с двумя куками, при этом fileName[1] остаётся. Почему так???
Т.е. в fileName[1] и fileName[2] находится абсолютно одинаковая инфа об одной и той же куке first_session (+ в fileName[2] инфа о куке seans). Почему броузер не удаляет fileName[1] или не пишет 2 новые куки именно в него?
В моём случае значение куки first_session в обоих файлах одинаковое, а что произойдёт, если я буду разные писать? Какое из них будет выбрано для чтения?
Как это исправить, чтобы на ПК посетителя хранился только 1 экземпляр куки с конкретным именем?
-
Какая тебе разница, что там какая-то левая программка пишет у себя на диск?
-
Это не совсем левая программка, а Интернет Эксплорер 6.0. :)
А вообще: она ведь мне будет отдавать эту куку, и я в соответствии с ней буду что-то делать. И если она хранит несколько вариантов одной и той же куки, то где гарантия, что она мне вернёт актуальную?
-
проблема твоя не в браузере, конечно же, а в том, что ты
1. сам не значешь, чего хочешь.
2. даешь своим кукам совершенно фантастические имена.
-
где гарантия, что она мне вернёт актуальную?
в RFC
-
RomikChef:
проблема твоя не в браузере, конечно же, а в том, что ты
1. сам не значешь, чего хочешь.
А по-моему знаю. При ведении системы гость/не-гость хочу также следить за тем, был ли у нас этот гость или нет.
Можно, конечно, всем писать одну вечную куку, а потом удалять из базы те сессии, в которых никто так и не авторизовался.
Но это не выход, т.к. я ещё хочу вести учёт открытия/закрытия окна с сайтом для тех юзеров, которых всегда помнят (т.е. у которых вечная кука) - для этого писать им куку, действительную только до закрытия окна.RomikChef:
2. даешь своим кукам совершенно фантастические имена.
В RFC есть критерий фантастического имени? :)
-
Хотеть ты можешь все, что угодно.
Хоть на луну.
Не буду препятствовать.
-
RomikChef, не вижу пока у себя на пути никаких препятствий для осуществления желаемого за исключением вот этих вот непоняток.
2all: может ли кто-нибудь по существу что-либо посоветовать? Кстати, иногда IE пишет 2 "вечные" куки в тот же самый файл, где была одна, а иногда создаёт новый. Может быть, при чтении куки он её даст из более нового по времени модификации файла?
-
чего-то я не понял проблему..
ну кинуть один кук, с парочкой параметров: один навсегда, а другой твой временный. когда он придет снова - временный параметр перезапишешь и все..
-
Forza:
Т.е. в fileName[1] и fileName[2] находится абсолютно одинаковая инфа об одной и той же куке first_session (+ в fileName[2] инфа о куке seans). Почему броузер не удаляет fileName[1] или не пишет 2 новые куки именно в него? В моём случае значение куки first_session в обоих файлах одинаковое, а что произойдёт, если я буду разные писать? Какое из них будет выбрано для чтения?
по-моему RomikChef прав, когда сказал что плевать тебе надо на то, что делает какая-то там программа, пусть даже и IE ,главное чтоб работало.. :) это позиция сервера, а остальное проблема клиета
-
Forza
Вообще IMHO закидывать в куку что-то кроме first_session - не зачем,
Храниш этот уникальный ID в базе, и определяешь его либо гостем либо пользователем, причем это определение может меняться при авторизации и наоборот... и считать можно сколько раз эта кука приходила и когда...
А каждый раз перепрописывать её - лишнее...
-
Green Kakadu:
по-моему RomikChef прав, когда сказал что плевать тебе надо на то, что делает какая-то там программа, пусть даже и IE ,главное чтоб работало.. это позиция сервера, а остальное проблема клиета
Согласен. Только из-за такого странного поведения ИЕ я был не уверен насчёт того, всё ли правильно делаю я сам. Может быть, это я его вынуждаю так некорректно работать.
К тому же RomikChef написал, что я сам не понимаю, что хочу, и сравнил это с полётом на Луну ;), поэтому остальные его рекомендации я не посчитал конструктивными.
Phoinix:
Вообще IMHO закидывать в куку что-то кроме first_session - не зачем,
Храниш этот уникальный ID в базе, и определяешь его либо гостем либо пользователем, причем это определение может меняться при авторизации и наоборот... и считать можно сколько раз эта кука приходила и когда...
Я думал о таком варианте. Но в этом случае мне на каждого человека, просто один раз заглянувшего на данную страницу, надо вечно хранить параметры сессии. Зачем? С заказчиком было решено, что корзина гостя не сохраняется. Поэтому сохранение данных о нём только для идентификации с целью ведения статистики кажется нерациональным. А так... пусть кука у него хранится. ;)
Phoinix:
А каждый раз перепрописывать её - лишнее...
Почти согласен. Переписывать куку каждый раз следует в том случае, если надо отсчитывать её срок жизни от последнего обращения, что не очень актуально при сроке жизни 10 лет (ну а вдруг всё-таки актуально, кто знает? ;) ).
Или можно действительно как-то задать абсолютную вечность куки, а не просто ооооочень долгий срок жизни?
-
После диалога
- где гарантия, что она мне вернёт актуальную?
- в RFC
- В RFC есть критерий фантастического имени?
когда человек лихо забыл, о чем спрашивал ранее, и весело ответил совсем не в тему, я счел, что продолжать беседу бессмысленно