Модераторы: Sardar, Aliance

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Cookie, описание 
:(
    Опции темы
Alx
Дата 16.4.2004, 08:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ajaxy
****


Профиль
Группа: Комодератор
Сообщений: 2903
Регистрация: 26.11.2003
Где: Cutopia

Репутация: 10
Всего: 78



народ, только не смейтесь, но я за всю свою жизнь ни разу не пользовался кукисами. сейчас пишу игру на JavaScript и они мне понадобились для сохранения настроек юзверя в оффлайновой весии. так что, подскажите мне просто, как имеея текстовое поле и кнопку, при слудующей загрузке странице в поле отображалось то, что юзверь туды ввел в прошлый раз перед нажатием кнопки. они должны храниться всегда. а если так нельзя, то до 2 апреля 2090 г. мне тады ровно сто лет исполниЦа!))


--------------------
PM MAIL WWW ICQ   Вверх
GoodBoy
Дата 16.4.2004, 11:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Главный джедай
****


Профиль
Группа: Модератор
Сообщений: 3886
Регистрация: 8.1.2003
Где: КМВ

Репутация: 2
Всего: 83



Вот тебе простейшие функции для работы с куками:
Код
function setCookie (name, value, expires, path, domain, secure) {
   var curCookie = name + "=" + escape(value) +
       ((expires) ? ";expires=" + expires : "") +
       ((path) ? ";path=" + path : "") +
       ((domain) ? ";domain=" + domain : "") +
       ((secure) ? ";secure" : "");
   if ((escape(value)).length <= 4000) document.cookie = curCookie+";";
}

function getCookie (name) {
   var prefix = name + "=";
   var cookieStartIndex = document.cookie.indexOf(prefix);
   if (cookieStartIndex == -1) return null;
   var cookieEndIndex = document.cookie.indexOf(";", cookieStartIndex + prefix.length);
   if (cookieEndIndex == -1) cookieEndIndex = document.cookie.length;
   return unescape(document.cookie.substring(cookieStartIndex + prefix.length, cookieEndIndex));
}

function deleteCookie (name, path, domain) {
   if (getCookie(name)) {
       document.cookie = name + "=" +
       ((path) ? "; path=" + path : "") +
       ((domain) ? "; domain=" + domain : "") + "; expires=Thu, 01-Jan-99 00:00:01 GMT"
   }
}


Пользуешь так:
Код
setCookie('region', 'Russia', '+10y');
var _region = getCookie('region');
deleteCookie('region');



--------------------
Чем дальше в лес, тем толще партизаны...

Цитата(igorold @  1.5.2016,  17:40 Найти цитируемый пост)
Индейцы не обратили внимания на поток беженцев из Европы… Теперь они живут в резервациях. 
PM MAIL   Вверх
GoodBoy
Дата 16.4.2004, 14:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Главный джедай
****


Профиль
Группа: Модератор
Сообщений: 3886
Регистрация: 8.1.2003
Где: КМВ

Репутация: 2
Всего: 83



Вообще все просто:

Цитата
Установить куку: setCookie (name, value, expires, path, domain, secure);
значения:
    name - имя куки
    value - значение
    expires - срок годности
    path - для какого каталога на сайте действительно
    domain - в каком домене работаем
    secure - секретность

Прочитать куку: value = getCookie (name);
значения:
    value - значение
    name - имя куки

Удалить куку: deleteCookie (name, path, domain)
значения:
    name - имя куки
    path - для какого каталога на сайте действительно
    domain - в каком домене работаем

Как правило параметры path, domain и secure используются редко.

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


Это сообщение отредактировал(а) Aliance - 11.4.2005, 14:54


--------------------
Чем дальше в лес, тем толще партизаны...

Цитата(igorold @  1.5.2016,  17:40 Найти цитируемый пост)
Индейцы не обратили внимания на поток беженцев из Европы… Теперь они живут в резервациях. 
PM MAIL   Вверх
Sardar
Дата 16.4.2004, 17:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 78
Всего: 317



Весь мир юзает один и тот же код... smile.gif
Я бы изменил setCookie:
Код
function setCookie(name, value, expires, path, domain, secure) {
var cdata = name+"="+escape(value)+
 ((expires)? "; expires=" + expires.toGMTString() : "")+
 ((path)? "; path=" + path : "")+
 ((domain)? "; domain=" + domain : "")+
 ((secure)? "; secure" : "");
 document.cookie = cdata;
}

Где expires это обьект Date:
Код
dateObj = new Date(timestamp);
dateObj = new Date(year, month, date[, hours[, minutes[, seconds[,ms]]]]);



--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
GoodBoy
Дата 2.6.2004, 10:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Главный джедай
****


Профиль
Группа: Модератор
Сообщений: 3886
Регистрация: 8.1.2003
Где: КМВ

Репутация: 2
Всего: 83



Давайте тогда так:

Код
function setCookie(name, value, expiredays, path, domain, secure) {
    var todayDate = new Date();
    todayDate.setDate(todayDate.getDate() + expiredays);

    var cdata = name+"="+escape(value)+
       ((expiredays)? "; expires=" + todayDate.toGMTString() : "")+
       ((path)? "; path=" + path : "")+
       ((domain)? "; domain=" + domain : "")+
       ((secure)? "; secure" : "");
    document.cookie = cdata;
}

В качестве expiredays передается ко-во дней на которую ставим куку!

Это сообщение отредактировал(а) Aliance - 5.7.2005, 09:24


--------------------
Чем дальше в лес, тем толще партизаны...

Цитата(igorold @  1.5.2016,  17:40 Найти цитируемый пост)
Индейцы не обратили внимания на поток беженцев из Европы… Теперь они живут в резервациях. 
PM MAIL   Вверх
Gold Dragon
  Дата 3.6.2004, 15:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: 1
Всего: 71



Подводя некую черту:

задание кука
Код
function qqq1(){
/*
name - имя параметра
string - строка
строка не может содержать пробел, запятую и точку с запятой
*/
document.cookie = "name=string"
}

задание кука с пробелами
Код
function qqq2(){
// задание строки
var a = "Сложный пример"
//строка не может содержать пробел, запятую и точку с запятой
// преобразование в шестнадцатиричное представление символов
var b = escape(a)
document.cookie = "name=" + b
}

задание срока годности
Код
function qqq3(){
// создание переменной Date()
var data = new Date()
// s - время в миллисекундах
// сколько 10 дней в миллисекундах
// дни * 24 ч * 60 мин * 60 с * 1000 мс
var s = 10 * 24 * 60 * 60 *1000
// установить переменную
// текущее время + продолжительность
data.setTime(data.getTime() + s)
// вычесляем время в формате GMT
var exp_v = data.toGMTString()
// устанавливаем куки с сроком годности
document.cookie = "name1=Пример1; expires=" + exp_v
}

получение простого значения
Код
function qqq4(){
// значение храниться в таком виде "name=Пример"
// получаем значение в массив
var a = document.cookie.split("=")
// a[0] = "Name"
// a[1] = "Пример"
}

задание нескольких значение
Код
function qqq5(){
// перечисляем параметры через (:)
document.cookie = "name1=Пример1:name2=Пример2:name3=Пример3"
}

чтение нескольких знечений
Код
function qqq6(){
// получаем массив типа "ИМЯ=ЗНАЧЕНИЕ"
var a = document.cookie.split(":")
// a[0] - name1=Пример1
// a[1] - name2=Пример2
// a[2] - name3=Пример3
var b = a[1].split("=")
// b[0] - name2
// b[1] - Пример2
}

удаление кука
Код
function qqq7(){
/* 
задание отрицательного знечения срока годности
удалиться параметр с именем "name"
значени "name" задавать не нужно
*/ 
document.cookie = "name=;expires=-1"
}

задание пути кука
Код
function qqq8(){
/*
на сайте есть папки
/papka1
/papka2
если страница создающая куки находиться в "/papka1"
то куки не будут видны в страницах находящихся в "papka2"
*/
document.cookie = "name=пример; path=/"
// задание корневой папки
}


задание параметра защиты
Код
function qqq9(){
/* 
значение secure булевое
если true - кук оправляется в браузер при подключение только через протокол HTTPS
если false или не указан - обычный протокол HTTP
*/
document.cookie = "name=пример; true"
}

указание домена которому назначается доступ к кукам
Код
function qqq10(){
/*
если на сервере есть узлы qqq1.lulu.ru и qqq2.lulu.ru
то кук созданный в первом не виден во втором
*/
document.cookie = "name=пример; domain=.lulu.ru"
// кук виден и там и там, точка обязательна
}


При задании имени параметра учитывайте регистр(!). Например, "name" и "Name" - это разные имена

Всё проверял (кроме domain и secure) - всё работает.

Надеюсь объяснил понятно.

Это сообщение отредактировал(а) Aliance - 11.4.2005, 14:56


--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
Aliance
Дата 11.4.2005, 15:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 55
Всего: 137



М
 

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


Это сообщение отредактировал(а) Aliance - 11.4.2005, 15:07
PM MAIL WWW ICQ Skype   Вверх
Иль
Дата 18.4.2005, 23:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 544
Регистрация: 3.3.2005
Где: Москва

Репутация: 2
Всего: 14



Цитата(Red @ 3.6.2004, 15:43)
строка не может содержать пробел, запятую и точку с запятой

Да нет, же, строка может содержать пробел и запятую. Или это справедливо для Оперы?

Цитата(Red @ 3.6.2004, 15:43)
document.cookie = "name=;expires=-1"

В Геко так нельзя.

+ В смысле "-1"

Это сообщение отредактировал(а) Иль - 18.4.2005, 23:41


--------------------
Ты виндусятник?... А я да. smile
PM MAIL ICQ Skype GTalk   Вверх
Sardar
Дата 19.4.2005, 00:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 78
Всего: 317



Иль нужно просто экранировать сторку функцией escape, ну или самодельной. Тогда хранить можно что угодно smile


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
Иль
Дата 19.4.2005, 01:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 544
Регистрация: 3.3.2005
Где: Москва

Репутация: 2
Всего: 14



Sardar, у меня сложилось ощущение, что escape много лишнего экранирует, чего не надо делать, например:
Пробел ` ~ ! @ # $ % ^ & ( ) { } [ ] ' : , / \ |

Я то использую свою функцию, но вот вдруг, например, пробелы из-за Оперы надо экранировать.
Может знаете какой подвох?


--------------------
Ты виндусятник?... А я да. smile
PM MAIL ICQ Skype GTalk   Вверх
Иль
Дата 19.4.2005, 02:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 544
Регистрация: 3.3.2005
Где: Москва

Репутация: 2
Всего: 14



Я хотел сказать ну ненадо для Cookies енто экранировать. Или надо smile


--------------------
Ты виндусятник?... А я да. smile
PM MAIL ICQ Skype GTalk   Вверх
Sardar
Дата 19.4.2005, 02:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 78
Всего: 317



Для кук нужно почти всё экранировать, кроме простого текста smile Какая разница что заэкранируются допустимые символы, ну будет строка на пару байт больше, это ведь не страшно, но безглючно smile


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
Aliance
Дата 19.4.2005, 14:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 55
Всего: 137



Цитата
Я то использую свою функцию, но вот вдруг, например, пробелы из-за Оперы надо экранировать.
Может знаете какой подвох?

Если не по теме - сильно не бейте, но пробел вроде бы можно заменить в urlе на %20

ЗЫ:
Sardar, не раскажешь о том, о чем говорил по асе - сжатие кук для увеличение дпустимого хранения. Или хотя бы ссылки :-)
PM MAIL WWW ICQ Skype   Вверх
Aliance
Дата 4.5.2005, 18:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 55
Всего: 137



PM MAIL WWW ICQ Skype   Вверх
fregs
Дата 5.7.2005, 09:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 72
Регистрация: 25.11.2004

Репутация: нет
Всего: 1



в сообщении GoodBoy от 2.6.2004, 10:39 очепятка с именем переменной expiredays(expires)

правильно так
Код

function setCookie(name, value, expiredays, path, domain, secure) {
   var todayDate = new Date();
   todayDate.setDate(todayDate.getDate() + expiredays);

   var cdata = name+"="+escape(value)+
      ((expiredays)? "; expires=" + todayDate.toGMTString() : "")+
      ((path)? "; path=" + path : "")+
      ((domain)? "; domain=" + domain : "")+
      ((secure)? "; secure" : "");
   document.cookie = cdata;
}


2 модераторам
почистить бы топик, лишнего много

М
 
Посмотрел, лишнего нет, относиться к кукам. Код стоит в первых постах. Аргументируй предложение :)

2Сардар: это потому, что я уже все подчистил :)


Это сообщение отредактировал(а) Aliance - 6.7.2005, 10:41
PM MAIL WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1713 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.