Autor Zpráva
Witus
Profil *
Často ve scriptech pracuju s cookies a tak mě napadlo napsat si knihovnu funkcí, která by mi zpříjemnila život a zpřehlednila kódy. Mno a tak jsem chvíli tvořil a vytvořil jsem tohle:

// Javascript functions library by Witiko
//
// vars definitions
var datum = new Date();
//end of definitions


function language() {
if(navigator['systemLanguage']==undefined||navigator['systemLanguage'] ==null||navigator['systemLanguage']==''){if(navigator['language']==und efined||navigator['language']==null||navigator['language']=='')navbl=" [neznámý]";else navbl=navigator['language'];} else navbl=navigator['systemLanguage'];
return navbl;
}

function writecookie(name,value) {
datum.setTime(datum.getTime() + 9999 *24*60*60*1000);
document.cookie += name + '=' + value + ';expires='+ datum.toGMTString() + ';';
hodnota1=null;
kukiny = document.cookie.split(";");
for (i in kukiny){
jednaKukina = kukiny[i].split("=");
if (jednaKukina[0] == name) hodnota3=jednaKukina[1];}
if(hodnota3==null||hodnota3==undefined||hodnota3==false||hodnota3=="un defined"||hodnota3=="null"||hodnota3=="false"){return false;} else {return true;}
}


function readcookie(name) {
hodnota2=null;
kukiny = document.cookie.split(";");
for (i in kukiny){
jednaKukina = kukiny[i].split("=");
if (jednaKukina[0] == name) hodnota2=jednaKukina[1];}
if(hodnota2==null||hodnota2==undefined||hodnota2==false||hodnota2=="un defined"||hodnota2=="null"||hodnota2=="false"){return false;} else {return hodnota2;}
}


function deletecookie(name) {
datum.setTime(datum.getTime() - 9999 *24*60*60*1000);
document.cookie = name + '=1;expires='+ datum.toGMTString() + ';';
hodnota3=null;
kukiny = document.cookie.split(";");
for (i in kukiny){
jednaKukina = kukiny[i].split("=");
if (jednaKukina[0] == name) hodnota3=jednaKukina[1];}
if(hodnota3==null||hodnota3==undefined||hodnota3==false||hodnota3=="un defined"||hodnota3=="null"||hodnota3=="false"){return true;} else {return false;}
}


function existcookie(name) {
hodnota4=null;
kukiny = document.cookie.split(";");
for (i in kukiny){
jednaKukina = kukiny[i].split("=");
if (jednaKukina[0] == name) hodnota4=jednaKukina[1];}
if(hodnota4==null||hodnota4==undefined||hodnota4==false||hodnota4=="un defined"||hodnota4=="null"||hodnota4=="false"){return false;} else {return true;}
}


function cookieslist() {
hodnota6=new Array();
kukiny = document.cookie.split(";");
for (i in kukiny){
jednaKukina = kukiny[i].split("=");
hodnota6[hodnota6.length]=jednaKukina[0];}
return hodnota6;
}


function deletecookies() {
hodnota7=true;
kukiny = document.cookie.split(";");
for (i in kukiny){
jednaKukina = kukiny[i].split("=");
if(!deletecookie(jednaKukina[0])){hodnota7=false;}
return hodnota7;
}}


//end of library



Jenom pro pochopení:

Funkce language() je trochu mimo mísu a navrací jazyk počítače v textovém tvaru.

Funkce writecookie("jméno cookie","hodnota cookie") se pokusí vytvořit cookie s nekonečným časovým limitem do její expirace a poté zjistí pomocí smyčky for(var in object) zda opravdu došlo k vytvoření cookie a výsledek navrátí jako návratovou hodnotu v boolean tvaru.

Funkce readcookie("jméno cookie") zjistí pomocí smyčky for(var in object) zda existuje cookie "jméno cookie" a výsledek navrátí jako String. Pokud cookie nenajde, navrátí funkce false.

Funkce deletecookie("jméno cookie") zapíše cookie s již vyprchaným časovým limitem a poté zjistí pomocí smyčky for(var in object) zda byla cookie "jméno cookie" smazána. Výsledek je boolean. Tato funkce navrátí true i při mazání cookie, která nikdy neexistovala.

Funkce existcookie("jméno cookie") to samé jako readcookie, ale na rozdíl od ní tato funkce jen pomocí for(var in object) zjistí existenci cookie a navrátí boolean.

Funkce cookieslist pomocí smyčky for(var in object) najde všechny cookies a navrátí jejich názvy jako array.

Funkce deletecookies využívá funkci deletecookie. Stejně jako funkce cookieslist pomocí smyčky for(var in object) najde všechny cookies a poté zavolá deletecookie ke smazání všech cookies dané stránky. Pokud všechna volání deletecookie během smyčky navrátí true, je návratová hodnota true, jinak je false.


Ale nepíšu, abych se mohl chlubit, ale protože mám s knihovnou problém. Zřejmě mám nějakou chybu v zápisu cookies, protože se mi nějak slučují a nedokážu korektně vytvořit více než jenu cookie. Uvedu přiklad.


writecookie("score","1264"); ---> Navrátí true
readcookie("score"); ---> Navrátí "1264"
document.cookie ---> Navrátí "score=1264"

To je v pořádku, ale poívejte co se stane při více cookies:

writecookie("score","1264"); ---> Navrátí true
writecookie("health","84"); ---> Navrátí true (nechápu proč, protože podle existcookie() i readcookie() žádná taková cookie nevznikla)
readcookie("score"); ---> Navrátí "1264health"
readcookie("health"); ---> Navrátí false
document.cookie ---> Navrátí "score=1264health=84"

Jak je vidět na příkladu, tak dojde k jakémusi spečení dvou cookies, jako by vytvořená cookie nebyla řádně ukončena, nicméně ve scrptu je cookie ukončená středníkem a nevím co je špatně :( . Poradíte?
Witus
Profil *
Pokud by si nějaká dobrá duše chtěla ten kód prohlédnout, tak tady je ke stažení v txt formátu: http://doodoo.wz.cz/functions.txt
Witus
Profil *
Těm co to nechtějí luštit bych chtěl říct, že chyba bude nejspíš v tomhle malém úseku:

document.cookie += name + '=' + value + ';expires='+ datum.toGMTString() + ';';
Leo
Profil
Nechce se mi to cist cele, ale pokud chcete pridat cookie, pak docela netradicne v js zapisete:

document.cookie = "Uzivatel=Franta"

zadne +=, Leo
Witus
Profil *
Já jsem to zkoušel, ale výsledek byl stejný.

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: