Cookie
Cookie - параметры, которые хранятся на стороне клиента.
Перевода этого термина на русский язык пока нет. Дословный перевод - печенье.
Произносится - куки.
Параметр cookie представляют собой пару name=value.
Всякий раз, когда ваш броузер запрашивает документ с веб-сервера,
он передает ему Cookie. На основание этих параметров броузер может получить
тот или иной HTML-документ. Как использовать Cookie на стороне веб-сервера,
будет рассказано в следующих частях книги. Здесь пойдет речь о работе с Cookie в JavaScript.
Пока вы должны понять, что такое Cookie, и что эти параметры доступны, как на стороне клиента, так и на
стороне веб-сервера. Соответственно добавлять и удалять эти параметры может и сервер, и клиент.
<script language="javascript">
<!--
//возвращает количество параметров
function GetCookieCount()
{
var len = document.cookie.length;
var n=0;
for(var i=0;i<len;i++)
{
if(document.cookie.charAt(i) == '=')
n++;
}
return n;
}
//возвращает значение параметра на основании его имени
function GetCookieValueByName(name)
{
var beg = document.cookie.indexOf(name+"=");
if(beg==-1)
return false;
var end = document.cookie.indexOf(";", beg + name.length);
if(end==-1)
end = document.cookie.length;
return unescape(document.cookie.substring(beg + name.length + 1, end));
}
//возвращает значение i-го параметра
function GetCookieValueByIndex(index)
{
var len = document.cookie.length;
var i,n=-1;
for(i=0;i<len && n!=index;i++)
{
if(document.cookie.charAt(i) == '=')
n++;
}
var end = document.cookie.indexOf(";", i);
if(end==-1)
end = document.cookie.length;
return unescape(document.cookie.substring(i, end));
}
//возвращает имя i-го параметра
function GetCookieNameByIndex(index)
{
var len = document.cookie.length;
var i, n=-1;
for(i=0;i<len && n!=index-1;i++)
{
if(document.cookie.charAt(i) == ';')
n++;
}
var end = document.cookie.indexOf("=", i);
return unescape(document.cookie.substring(i, end));
}
//Устанавливает значение параметра.
//name и value обязательные параметры этой функции, остальные
//могут быть опущены.
//Время жизни задается в переменной expires
//expires задается в следующем виде Thu, 01-Jan-70 00:00:01 GMT
//т.е. День недели, число-месяц-год часы:минуты:секунды
//path задет префикс пути HTML-документов, в которых будет доступно
//значение параметра name
//domain задет доменное имя HTML-документов, в которых будет доступно
//значение параметра name
//secure - если этот параметр указан, то Cookie будут передаваться
//только по защищенному протоколу HTTPS
function SetCookie(name, value, expires, path, domain, secure)
{
document.cookie = name + "=" + escape(value) +
((expires) ? "; expires=" + expires.toGMTString() : "") +
((path) ? "; path=" + path : "") +
((domain) ? "; domain=" + domain : "") +
((secure) ? "; secure" : "");
}
//все тоже самое, только время жизни параметра
//задается не как абсолютная величина, а как относительная
//в неделях относительно текущей даты
function SetCookieForNWeeks(name, value, weeks, path, domain, secure)
{
var today = new Date();
expires = new Date(today.getTime() + weeks*7*24*60*60*1000);
document.cookie = name + "=" + escape(value) +
"; expires=" + expires.toGMTString() +
((path) ? "; path=" + path : "") +
((domain) ? "; domain=" + domain : "") +
((secure) ? "; secure" : "");
}
//соответственно в днях
function SetCookieForNDays(name, value, days, path, domain, secure)
{
var today = new Date();
expires = new Date(today.getTime() + days*24*60*60*1000);
document.cookie = name + "=" + escape(value) +
"; expires=" + expires.toGMTString() +
((path) ? "; path=" + path : "") +
((domain) ? "; domain=" + domain : "") +
((secure) ? "; secure" : "");
}
//соответственно в часах
function SetCookieForNHours(name, value, hours, path, domain, secure)
{
var today = new Date();
expires = new Date(today.getTime() + hours*60*60*1000);
document.cookie = name + "=" + escape(value) +
"; expires=" + expires.toGMTString() +
((path) ? "; path=" + path : "") +
((domain) ? "; domain=" + domain : "") +
((secure) ? "; secure" : "");
}
//в минутах
function SetCookieForNMinuts(name, value, minuts, path, domain, secure)
{
var today = new Date();
expires = new Date(today.getTime() + minuts*60*1000);
document.cookie = name + "=" + escape(value) +
"; expires=" + expires.toGMTString() +
((path) ? "; path=" + path : "") +
((domain) ? "; domain=" + domain : "") +
((secure) ? "; secure" : "");
}
//и, наконец, в секундах
function SetCookieForNSeconds(name, value, seconds, path, domain, secure)
{
var today = new Date();
expires = new Date(today.getTime() + seconds*1000);
document.cookie = name + "=" + escape(value) +
"; expires=" + expires.toGMTString() +
((path) ? "; path=" + path : "") +
((domain) ? "; domain=" + domain : "") +
((secure) ? "; secure" : "");
}
//удаляет параметр Cookie,
//установив ему время жизни 1 Января 1970 года
function DeleteCookie(name, path, domain)
{
if(GetCookieByName(name))
document.cookie = name + "=" +
((path) ? "; path=" + path : "") +
((domain) ? "; domain=" + domain : "") +
"; expires=Thu, 01-Jan-70 00:00:01 GMT";
}
//-->
</script>
Если параметр expires не указан, то cookie хранится в течение одного
сеанса, до закрытия броузера.
Параметр domain определяет доменное имя веб-сервера, для документов которого
будут доступны Cookie. Например, если указано itsoft.ru, то значит всякий раз при запросе
документа с сайта itsoft.ru броузер будет передавать на сервер соответствующий параметр
Cookie.
Если этот параметр не задан, то по умолчанию используется
доменное имя сервера, с которого был загружен HTML-документ.
Параметр path определяет путь на веб-сервере для HTML-документов, дл которых будут
посылаться параметры Cookie. Например, если указано "/guest", то соответствующий параметр будет передан
для всех HTML-документов, путь к которым подпадает под маску /guest*, т.е.
для /guestbook/index.html, /guestbook/post.html, /guestbook/old/index.html,
/guests.html и т.д.
Если этот параметр не указан, то значение cookie распространяется только на
документы в той же директории, что и документ, в котором было установлено значение cookie.
Ниже приведен код таблицы и HTML-формы для установки параметров Cookie.
<table align="center" width="300" border="0"
cellspacing="1" cellpadding="0"
bgcolor="#000000">
<tr bgcolor="#CCCCFF" align="center"> <td> Параметр<td> Значение
<script language="javascript">
<!--
function MakeArray(n)
{
for(var i=0;i<n;i++)
this[i] = 0;
return this;
}
var i,n=GetCookieCount();
c = new MakeArray(2);
c[0]="\"#EEEEEE\"";
c[1]="\"#CCCCCC\"";
for(i=0;i<n;i++)
document.writeln(
"<tr bgcolor=" + c[i%2] + "> <td>" + GetCookieNameByIndex(i)
+ "<td>" + GetCookieValueByIndex(i)
);
-->
</script>
</table>
<form name="SetCookieForm">
<table border=0>
<tr><td>
name<td> <input type="text" name="name" size=40>
<tr><td>
value<td> <input type="text" name="value" size=40>
<tr><td>
life time in<td> <input type="text" name="days" size=5> days OR in
<input type="text" name="seconds" size=5> seconds
<tr><td>
path<td> <input type="text" name="path" value="/docs/web" size=40>
<tr><td>
domain<td> <input type="text" name="domain" value="itsoft.ru" size=40>
</table>
<input type="button" value="Установить Cookie на энное кол-во дней"
onClick="SetCookieForNDays( SetCookieForm.name.value,
SetCookieForm.value.value,
SetCookieForm.days.value,
SetCookieForm.path.value,
SetCookieForm.domain.value);
window.location.href=window.location.href;">
<br><br>
<input type="button" value="Установить Cookie на энное кол-во секунд"
onClick="SetCookieForNSeconds( SetCookieForm.name.value,
SetCookieForm.value.value,
SetCookieForm.seconds.value,
SetCookieForm.path.value,
SetCookieForm.domain.value);
window.location.href=window.location.href;">
</form>
УпражнениеДоработайте этот код, чтобы можно было редактировать и удалять параметры Cookie. |