Avatar billede mik28 Seniormester
12. september 2002 - 09:28 Der er 18 kommentarer og
1 løsning

cookies

Hvordan opretter jeg en cookie og læser den igen? Jeg har prøvet følgende, men syntaksen er vist helt forkert :-)

For at oprette en cookie:

<script>
document.cookie = "cookie1=Dette er en test";
</script>

For at læse:

<script lauguage="JavaScript">

var cookies = document.cookie;

    function readCookie(name)
    {
    var start = cookies.indexOf(name + "=");
   
        if(start == -1)
        {
            alert("Cookie ikke fundet");
        }
       
        start = cookies.indexOf("=", start) + 1;
        var end  = cookies.indexOf(";", start);
       
        if (end == -1)
        {
            end = cookie.length;
        }
   
        var value = unescape(cookies.substring(start,end));
       
        if (value == null)
        {
            alert("Ingen cookies fundet");
        }
        else
        {
            alert("Cookiens vaerdi er: " + value);
        }
    }
   
</script>
Avatar billede nikolajdu Nybegynder
12. september 2002 - 09:47 #1
Jeg bruger den her (Som sikkert kan koges meget ned...

function hentKage2 (name) {
var cook = document.cookie;
var cookNavn = name + "=";
var laengde = cook.length;

var start = 0;
while (start < laengde) {
var slut = start + cookNavn.length;
if (cook.substring(start, slut) == cookNavn) {
var vend = cook.indexOf (";", slut);
if (vend == -1) vend = laengde;
return unescape(cook.substring(slut, vend));
}

start = cook.indexOf(" ", start) + 1;
if (start== 0) break;
}
return null;
}

Kan så kaldes med :

test = alert("cookie1)
Avatar billede mik28 Seniormester
12. september 2002 - 09:47 #2
Sådan her prøver jeg at læse cookien med navnet cookie1

<form>
<input type="button" onclick="readCookie('cookie1');" value="læs cookie">
</form>
Avatar billede o-zone Nybegynder
12. september 2002 - 09:48 #3
Du skal i hvert fald have et expires tidspunkt med i cookie strengen. Ellers havner den ikke på klient HD'en! :(

Du skal også slippe af med mellemrummene i tekststrengen. Cookies har det ikke så godt med specialtegn!

altså noget i stil med (ud af hovedet, og uden nogen garantier):
---8<--------

var nutid = new Date(); // opretter en dato indeholdende dagsdato
nutid.setFullYear((nutid.getFullYear+1)); // sætter expiredatoen til et år fra nu

var str = escape("Dette er en test"); // opretter en streng med din tekst uden mellemrum

document.cookie = "cookie1="+str+";expires="+nutid.toGMTString();
---8<--------
escape() bytter alle specialtegn ud med koder.
Når du skal have strengen igen kan du bare bruge unescape() - men det har du vist allerede fundet ud af?

toGMTString() afleverer en dato i det format som cookiestrengen accepterer (og datoen skal jo altså ikke være overskredet - så sletter du nemlig cookie'en!)

I øvrigt er det halvsløset at regne med at indexOf("=", start) kan bruges til at få strengen. Det virker kun så længe du kun har sat een cookie!

Håber at det var forståeligt!
:)

P.S. I følge EU's nye spam-lovgivning, så skal du huske at spørge om lov, før du sætter en cookie på brugerens maskine, så det bliver noget med en if (confirm("Må jeg sætte en cookie?"))
(ja - det er gudformbarmemig ikke let at være tekniker i en verden befolket af ikke tekniske politikere!!) ;-)
Avatar billede nikolajdu Nybegynder
12. september 2002 - 09:49 #4
gah...

test = alert(hentKage2("cookie1"))

Sådan...
Avatar billede o-zone Nybegynder
12. september 2002 - 09:52 #5
nutid.getFullYear hedder selvfølgelig nutid.getFullYear() :)
Avatar billede mik28 Seniormester
12. september 2002 - 10:00 #6
hvad er der galt med det script jeg bruger til at se om der er en cookie med et specielt navn?
Avatar billede o-zone Nybegynder
12. september 2002 - 10:07 #7
sorry - jeg havde vist lidt for travlt før (og så var jeg alligevel ikke den første der svarede :/)
Der er vist intet galt med din måde at læse cookien på! Jeg triggede bare på at se en indexOf("=" - thingie. Men du bruger jo et offset!

My mistake! :)
Avatar billede mik28 Seniormester
12. september 2002 - 10:13 #8
no problemo
Avatar billede mik28 Seniormester
12. september 2002 - 10:39 #9
Det er bare for meget med de politikere :-) Endnu en ting de ikke aner en prut om *LOL*
Avatar billede mik28 Seniormester
12. september 2002 - 10:40 #10
tak for hjælpen :-)
Avatar billede nikolajdu Nybegynder
12. september 2002 - 10:40 #11
mik Hvad er dit problem nu?
Avatar billede mik28 Seniormester
12. september 2002 - 10:52 #12
nikolajdu --> Jeg bruger bare den kode du postede. Jeg forstår bare ikke hvorfor den anden ikke virkede. Det er såmend det hele :-)
Avatar billede nikolajdu Nybegynder
12. september 2002 - 10:54 #13
Det er da fint, men er kotumen så egentligt ikke at bede folk svare...

Anyway nevermind...
Avatar billede o-zone Nybegynder
12. september 2002 - 11:04 #14
was?? Virkede min kode ikke, eller er det din egen kode du snakker om?

Din egen kode manglede expire dato, og escape'ing af strengen.

...og hvis du bruger nikolajdu's kode, så skal han da have point'ene. Han svarede jo også først (selvom mit svar også forklarede (prøvede på?) hvorfor din kode ikke virkede).

:)

P.S. nikolajdu>>> kan du ikke bare sende et svar med det samme når du svarer på et spørgsmål ... det er spild af plads, tid og båndbrede at svare med en kommentar, og så bagefter skulle svare med et svar for at få points, hvis kommentaren bliver accepteret som et svar. :-/
Avatar billede nikolajdu Nybegynder
12. september 2002 - 11:16 #15
o-zone - Jeg sender ikke et svar med mindre jeg er 100% sikker.

En af grundene hertil er at folk ofte smider point (eller flest point) efter mig fordi jeg ligger på top 3. Det giver altså en lidt ekstra i hatten effekt som på ingen måder er nødvendig. En anden og ganske vægtig grund er at der ofte accepteres før løsningen er nået og så skal man ud i "point tilbage...".

Anyway så behold du bare pointene det er jo ikke fordi jeg mangler :)

/Nikolaj
Avatar billede mik28 Seniormester
12. september 2002 - 11:19 #16
Jeg havde ikke mulighed for at give nikolajdu pointene. Jeg er sku ikke ude på at fornærme nogen.
Avatar billede nikolajdu Nybegynder
12. september 2002 - 11:20 #17
mik - Det ved jeg godt du ikke er og du kunne ikke give mig point, da jeg ikke havde svaret - Skrev bare at det kunne du jo så have bedt mig om :))

Skidt pyt og god dag :)
Avatar billede mik28 Seniormester
12. september 2002 - 11:24 #18
I lige måde :-)
Avatar billede o-zone Nybegynder
12. september 2002 - 11:33 #19
http://www.eksperten.dk/spm/257009
og så må I begge have en fortsat god dag! :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester