HTML, Excel, Word, SEOÎñíîâû JavaScript ⇒ Cookies è õðàíåíèå ñîñòîÿíèÿ

ÎÑÍÎÂÛ JavaScript

Ó÷åáíèê JavaScript
·Çíàêîìñòâî ñ JS. Ïåðåìåííûå, îïåðàòîðû, îïåðàöèè
·Ôóíêöèè
·Ìîäåëü HTML äîêóìåíòà
·Èåðàðõèÿ äîêóìåíòîâ â áðàçóåðå
·Ôîðìû
·Îêíà è ôðåéìû
·Ññûëêè, çàãîëîâîê, ñòàòóñ
·Ñîáûòèÿ
·Ñîáûòèÿ êëàâèàòóðû è ìûøè
·Ñîáûòèÿ. Òàéìåð
·Ñòèëè. Óïðàâëåíèå ñòèëÿìè
·Ñëîè è áëîêè. Óïðàâëåíèå âèäèìîñòüþ
·Îáúåêòû JS
·Âíåøíèå îáúåêòû
·Âíóòðåííèå îáúåêòû
·Ìàññèâû
·Ðåãóëÿðíûå âûðàæåíèÿ
·Ìàòåìàòèêà â JS
·Ïðèìåð ïðîñòîãî êàëüêóëÿòîðà
·Äàòà è âðåìÿ
·Cookies è õðàíåíèå ñîñòîÿíèÿ
·Íåìíîãî îá AJAX
·Ðàáîòà ñ WebMoney

 

Cookies è õðàíåíèå ñîñòîÿíèÿ


Àâòîð: Àðòåìüåâ Ñåðãåé Èãîðåâè÷ ICQ: 438856621 email: _spin_@bk.ru


Êàê ìû óæå ãîâîðèëè, ïðè êàæäîé çàãðóçêå ñòðàíèöû è ïðè êàæäîì å¸ îáíîâëåíèè ñêðèïòû íà÷èíàþò âûïîëíÿòüñÿ çàíîâî. Ñ îäíîé ñòîðîíû - ýòî õîðîøî, ò.ê. ìîæíî íå çàáîòèòüñÿ î ïðåäûäóùèõ ñîñòîÿíèÿõ ñêðèïòà. Íî ñ äðóãîé ñòîðîíû – èíîãäà íàäî õðàíèòü äàííûå î ïðåäøåñòâóþùèõ äåéñòâèÿõ èëè ââåä¸ííûõ ïîëüçîâàòåëì äàííûõ.

 JavaScript ñóùåñòâóåò åäèíñòâåííûé ìåõàíèçì, ïîçâîëÿþùèé çàïîìíèòü ñâî¸ ñîñòîÿíèå – cookies (â ïåðåâîäå ñ àíãëèéñêîãî – «ïå÷åíüå»). Îòêóäà âçÿòî ýòî íàçâàíèå – òåïåðü ñêàçàòü ñëîæíî, íî ïðèíÿòî ñ÷èòàòü, ÷òî òåðìèí cookies ïîÿâèëñÿ åù¸ íà çàðå ðàçâèòèÿ Unix è ëîêàëüíûõ ñåòåé.

Cookie – ýòî íåáîëüøîé òåêñòîâûé áëîê, êîòîðûé áðàóçåð ñîõðàíÿåò íà äèñê ïðè ïåðâîé çàãðóçêå ñòðàíèöû. Ïðè ïîñëåäóþùèõ îáíîâëåíèÿõ ñòðàíèöû cookie áóäåò àâòîìàòè÷åñêè ïîñëàí ñåðâåðó âìåñòå ñ GET- èëè POST-çàïðîñîì.

Îáû÷íî cookie èñïîëüçóþòñÿ äëÿ õðàíåíèÿ íåáîëüøèõ ôðàãìåíòîâ äàííûõ, òàêèõ êàê èäåíòèôèêàòîðû ñåññèè PHP, âðåìåííûå ñåàíñîâûå êëþ÷è, õåøè ïàðîëåé è ò.ä. Ìàêñèìàëüíûé îáú¸ì äàííûõ, êîòîðûé ìîæíî ñîõðàíèòü â îäíîì cookie, ñîñòàâëÿåò 4 Êá, à ñðåäíèé îáú¸ì cookie îáû÷íî íå ïðåâûøàåò êèëîáàéòà. Óâëåêàòüñÿ õðàíåíèåì äàííûõ ñ cookies íå ñòîèò, ò.ê. îíè îòïðàâëÿþòñÿ íà ñåðâåð ïðè êàæäîì îáíîâëåíèè ñòðàíèöû. Òàê ÷òî åñëè âàøà ñòðàíèöà «âåñèò» 10 Êá, à â cookie âû ñîõðàíèëè âñå 4 Êá – òî âàø òðàôèê âûðàñòåò ïî÷òè â ïîëòîðà ðàçà.

Ëþáîé cookie ñîäåðæèò íåñêîëüêî ïîëåé ñ ôèêñèðîâàííûìè èìåíàìè:

expires

Äàòà è âðåìÿ èñòå÷åíèÿ "ñðîêà ãîäíîñòè" cookie. Ïî äîñòèæåíèè ýòîãî âðåìåíè îí áîëüøå íå áóäåò îòñûëàòüñÿ íà ñåðâåð. Åñëè ýòîò ïàðàìåòð íå óêàçàí - cookie ñîõðàíÿåòñÿ äî çàêðûòèÿ áðàóçåðà. Ïàðàìåòð äîëæåí âñåãäà çàäàâàòüñÿ â ôîðìàòå "Äåíü, ×èñëî-Äåí-ÃÃÃà ××:ÌÌ:ÑÑ GMT", Íàïðèìåð:

expires=Mon, 20-Jan-2010 10:10:10 GMT

Ýòîò cookie ïåðåñòàíåò îòñûëàòüñÿ íà ñåðâåð ïîñëå 10 ÷àñîâ 10 ìèíóò 10 ñåêóíä 20 ÿíâàðÿ 2010 ãîäà ïî Ãðèíâè÷ó.

path

Ïóòü íà ñåðâåðå, äëÿ êîòîðîãî áóäåò èñïîëüçîâàòüñÿ ýòîò cookie. Åñëè âû õîòèòå çàäàòü cookie äëÿ âñåãî ñåðâåðà - ïîñòàâüòå "/"

 

domain

Èìÿ äîìåíà, äëÿ êîòîðîãî äåéñòâèòåëåí äàííûé cookie. Ýòîò ïàðàìåòð äåéñòâåò íå òîëüêî íà îñíîâíîé äîìåí, íî è âñå åãî ïîääîìåíû

 

secure Ïàðàìåòð îïðåäåëÿåò, íàäî ëè èñïîëüçîâàòü äëÿ ïåðåäà÷è cookie øèôðîâàííîå ñîåäèíåíèå (HTTPS). Åñëè íå óñòàíîâëåí - èñïîëüçóåòñÿ îáû÷íîå ñîåäèíåíèå.

Êðîìå ôèêñèðîâàííûõ ïîëåé, âû ìîæåòå çàäàâàòü ñâîè. Ýëåìåíòû çàäàþòñÿ â ôîðìàòå "ÈÌß=ÇÍÀ×ÅÍÈÅ", íàïðèìåð:

MYNAME=Äÿäÿ Âàñÿ

Ïåðåä òåì, êàê çàïðîñèòü ñòðàíèöó íà ñåðâåðå, áðàóçåð ïðîâåðÿåò, åñòü ëè ó íåãî óæå cookie îò äàííîãî ñåðâåðà (ïîëÿ path è domain). Åñëè åñòü è èõ «ñðîê ãîäíîñòè» íå èñò¸ê (ïîëå expires) – îòïðàâëÿåò íàéäåííûå äàííûå ñåðâåðó. Óñòàðåâøèå cookie áðàóçåð ïðè çàïðîñå ñòðàíèöû ïðîñòî èãíîðèðóåò.

Òåïåðü ðàññìîòðèì ïîðÿäîê ðàáîòû ñ cookies.

Åäèíñòâåííûé ñïîñîá äîáðàòüñÿ äî cookies òåêóùåãî äîêóìåíòà - èñïîëüçîâàòü âñòðîåííûé îáúåêò document.cookies. Ïî ñóòè ýòî ñòðîêà, ñîäåðæàùàÿ âñå cookie, îäèí çà äðóãèì, ðàçäåë¸ííûå òî÷êîé ñ çàïÿòîé:

èìÿ_1=çíà÷åíèå_1;èìÿ_2=çíà÷åíèå_2;.....

Íîâûé cookie äîáàâëÿåòñÿ îáû÷íûì ïðèñâîåíèåì îáúåêòó document.cookie íîâîãî çíà÷åíèÿ:

document.cookie = "myname=deniska";

Îáðàòèòå âíèìàíèå, ÷òî ïðè îáðàòíîé îïåðàöèè âû ïîëó÷èòå íå ïîñëåäíèé óñòàíîâëåííûé cookie, à ÂÑÅ cookies, ñîîòâåòñòâóþùèå äàííîìó äîêóìåíòó:

var list = document.cookie;
// list òåïåðü ñîäåðæèò âñå cookie äîêóìåíòà

Ðàññìîòðèì êîìïëåêñíûé ïðèìåð, ñîçäàäèì íåñêîëüêî ôóíêöèé äëÿ ìàíèïóëèðîâàíèÿ cookies.

<script language="JavaScript"> 

// ïîëó÷åíèå cookie ïî çàäàííîìó ñìåùåíèþ
function GetValue (offset) 
{ 
		var strEnd = document.cookie.indexOf (";", offset); 
		if (strEnd == -1) 
			strEnd = document.cookie.length; 
		return unescape(document.cookie.substring(offset, strEnd)); 
} 

//ïîëó÷åíèå cookie ïî èìåíè
function GetCookie(name) 
{ 
		var key = name + "="; 
		var i = 0; 
		while (i < document.cookie.length) { 
			var j = i + key.length; 
			if (document.cookie.substring(i, j) == key) 
				return GetValue (j); 
			i = document.cookie.indexOf(" ", i) + 1; 
			if (i == 0) 
				break; 
		} 
		return null; 
} 

// óñòàíîâêà cookie ïî èìåíè
function SetCookie (name, value) 
{ 
		var argv = SetCookie.arguments; 
		var argc = SetCookie.arguments.length; 
		var expires = (argc > 2) ? argv[2] : null; 
		var path = (argc > 3) ? argv[3] : null; 
		var domain = (argc > 4) ? argv[4] : null; 
		var secure = (argc > 5) ? argv[5] : false; 
		document.cookie = name + "=" + escape (value) + 
			((expires == null) ? "" : ("; expires=" + 
			expires.toGMTString())) + 
			((path == null) ? "" : ("; path=" + path)) + 
			((domain == null) ? "" : ("; domain=" + domain)) + 
			((secure == true) ? "; secure"; : "");
}

// óäàëåíèå îäíîãî cookie
function DeleteCookie(strName)
{
	document.cookie = strName + "=0; expires=" 
					+ (new Date(0)).toGMTString();
}




</script> 

Òåïåðü ðàññìîòðèì ïðèìåð èñïîëüçîâàíèÿ íàøèõ ôóíêöèé:

<script language="JavaScript"> 

		var userName = GetCookie('username'); 
		
		if (userName == null) 
		{ 
			// ïîëüçîâàòåëü íå çàðåãèñòðèðîâàí
			userName = 'Ãîñòü'; 
		} 
		else 
		{ 
			// èçâëåêàåì òåêóùèé àäðåñ ñòðàíèöû
			pathName = location.pathname; 
			// èç àäðåñà ïîëó÷åì ïîëíîå èìÿ äîìåíà
			domain = pathName.substring(0,pathName.lastIndexOf('/')) +'/'; 
			// ïîëó÷àåì òåêóùóþ äàòó
			var expDate = new Date ();
			// óñòàíàâëèâàåì "ñðîê ãîäíîñòè"cookie íà ãîä  
			expDate.setTime(expDate.getTime() + (365 * 24 * 3600 * 1000)); 
			SetCookie('username',userName, expDate, domain); 
		} 
		// âûâîäèì èìÿ ïîëüçîâàòåëÿ íà ñòðàíèöó
		document.write('<p align="center">Çäðàâñòâóéòå, ' + userName + '</p>');

</script>

Êàê âèäèòå, ïîëüçîâàòüñÿ cookie äîñòàòî÷íî ïðîñòî. Ãëàâíîå - ïðàâèëüíî ôîðìèðîâàòü ñîîòâåòñòâóþùèå ñòðîêè ïàðàìåòðîâ.

 íàñòîÿùåå âðåìÿ ïðàêòè÷åñêè âñå áðàóçåðû ïîääåðæèâàþò cookies. Íåêîòîðûå ïîëüçîâàòåëè  (ïðèìåðíî 2-4%) ïðèíóäèòåëüíî îòêëþ÷àþò òàêóþ ïîääåðæêó, õîòÿ ëè÷íî ÿ íè÷åãî îïàñíîãî â cookies íå âèæó. Ìàêñèìóì, ÷åì ìîãóò ïîâðåäèòü âêëþ÷åííûå cookies – çëîóìûøëåííèê ñìîæåò óçíàòü âàø ëîãèí è ïàðîëü ïî÷òîâîãî ÿùèêà, äà è òî – åñëè âû áóäåòå ñëèøêîì áåñïå÷íû è íà÷í¸òå îòêðûâàòü èç âåá-èíòåðôåéñà ïî÷òîâèêà âñÿêèå îòêðûòêè, øóòêè è ïðî÷èå îïàñíûå ïàêîñòè.

Îïðåäåëèòü, âêëþ÷åíû ó ïîëüçîâàòåëÿ cookie èëè íåò ìîæíî ïðè ïîìîùè ñëåäóþùåé ôóíêöèè:

// Ôóíêöèÿ  âîçâðàùàåò true, åñëè cookie âêëþ÷åíû,
// â èíîì ñëó÷àå - false

function IsCookieEnabled()
{
		// ïðîâåðÿåì ñóùåñòâîâàíèå ñâîéñòâà navigator.cookieEnabled
		if(typeof(navigator.cookieEnabled) != "undefined")
			return navigator.cookieEnabled;
		else
		{
			// åñëè ñâîéñòâî navigator.cookieEnabled 
			// íå ïîääåðæèâàåòñÿ, òî ïðîñòî ïîïðîáóåì
			// óñòàíîâèòü è ïîëó÷èòü íàçàä òåñòîâûé cookie
			var tmpCookie = "testCookieForCheck";
			SetCookie(tmpCookie, "1");
			if(GetCookie(tmpCookie) != null)
  		{
  			DeleteCookie(tmpCookie);
  			return true;
  		}
			return false;
  	}
}

Ñookies äàþò ìàññó ïðåèìóùåñòâ. Íàïðèìåð, ïðè ðåãèñòðàöèè íà ñàéòàõ â ôîðìå ðåãèñòðàöèè îáû÷íî åñòü ãàëî÷êà «çàïîìíèòü ìåíÿ». Åñëè âû å¸ íå ñòàâèòå – ñåðâåð ñîõðàíÿåò âðåìåííûé cookie, äåéñòâèòåëüíûé ëèøü äî çàêðûòèÿ áðàóçåðà. À âîò åñëè âû ãàëî÷êó ïîñòàâèëè – ñåðâåð ñîõðàíèò cookie ñ äëèòåëüíûì ñðîêîì æèçíè, à çíà÷èò ïðè ñëåäóþùåì çàõîäå íà ýòîò ñàéò âû áóäåòå àâòîìàòè÷åñêè èäåíòèôèöèðîâàíû ïî ðàíåå ñîõðàí¸ííûì äàííûì. Àíàëîãè÷íûé ïðè¸ì èñïîëüçóåòñÿ íà áîëüøèíñòâå ñàéòîâ.  áîëüøèíñòâå áðàóçåðîâ ïðåäóñìîòðåíà âîçìîæíîñòü ïðîñìîòðà è óïðàâëåíèÿ cookie. Òàê ÷òî âû ìîæåòå â ëþáîé ìîìåíò çàéòè è ïîñìîòðåòü êòî è ÷òî âàì ñîõðàíÿë.

Ñîõðàíåíèå ñîñòîÿíèÿ ñòðàíèö â íåêîòîðûõ ñëó÷àÿõ ñóùåñòâåííî îáëåã÷àåò íàâèãàöèþ ïî ñàéòó è ïðèâëåêàåò âîçìîæíûõ ïîñåòèòåëåé è êëèåíòîâ, à ýòî â ñâîþ î÷åðåäü ñïîñîáñòâóåò áûñòðîé ðàñêðóòêå ñàéòà. Íî íàèáîëåå ýôôåêòèâíûé ìåòîä – îäíîâðåìåííîå ñîõðàíåíèå ñîñòîÿíèÿ êàê íà ñòîðîíå êëèåíòà (ñ ïîìîùüþ cookies), òàê è íà ñòîðîíå ñåðâåðà (íàïðèìåð, ñ ïîìîùüþ ñåññèé).



 íà÷àëî ñòðàíèöû



 íà÷àëî ñòðàíèöû