/ Forside / Teknologi / Udvikling / Java Scripts / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Java Scripts
#NavnPoint
molokyle 5410
Klaudi 2799
smorch 2439
kim 1360
Harlekin 1134
bentjuul 984
gibson 800
severino 695
Random 675
10  konsulent.. 626
Sådan bager man cookier med JavaScrip
Fra : Jonas Koch Bentzen


Dato : 29-08-02 12:46

Forleden dag sad jeg og skulle lave cookier med JavaScript, og jeg
opdagede et par interessante (eller rettere: deprimerende) ting:



1. Cookie-specifikationen (skrevet af Netscape, der opfandt ideen) er
fuld af fejl og selvmodsigelser. På
http://wp.netscape.com/newsref/std/cookie_spec.html kan man under
overskriften "expires=Date" læse, at udløbsdatoen skal formateres med et
fire-cifret år. I eksemplet længere nede er årstallet dog kun skrevet
med to cifre. Ugedagnavnet er skrevet med tre bogstaver, hvor det i
eksemplet nederst er skrevet fuldt ud. De selvmodsigelser har afledt
endnu mere forvirring på Netscapes andre sider, f.eks. siden om
document.cookie i JavaScript-specifikationen samt
http://developer.netscape.com/docs/manuals/js/client/jsref/cookies.htm#1002170.
Nuvel, jeg bilder mig ind, jeg har fundet det rigtige format for
udløbsdatoen, og det er:

Thursday, 29-Aug-02 13:28:00 GMT

Hele cookien kan så se således ud:

navn=vaerdi%20med%20mellemrum; path=/; expires=Thursday, 29-Aug-02
13:28:00 GMT



2. Når man ser på de eksempler på cookiebagning med JavaScript, der
findes på nettet, så bruger de stort set allesammen en forkert
formatering af datoen. De bruger funktionen toGMTString(), som ikke bare
er forældet i JavaScript 1.3, men også (ifølge Netscapes egen JavaScript
1.3-dokumentation) giver et forskelligt format alt efter hvilken
platform, man befinder sig på (alene dét gør funktionen ubrugelig til
cookier). I min Mozilla giver toGMTString() følgende format:

Thu, 29 Aug 2002 11:32:20 GMT

Det ligner lidt cookie-udløbsdatoformatet, men er bestemt ikke det
samme. Det betyder så, at man må bruge JavaScripts mildt sagt dårlige
datofunktioner til at lave en gyldig udløbsdato. Her er mit forslag til,
hvordan man med JavaScript 1.3 laver en gyldig cookie med udløbsdato om
et år:

maaneder = new Array("Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul",
"Aug", "Sep", "Oct", "Nov", "Dec")
dage = new Array("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday",
"Friday", "Saturday")

dato = new Date()
dato.setUTCFullYear(dato.getUTCFullYear() + 1)

dag = dage[dato.getUTCDay()]
dagIMaaneden = dato.getUTCDate()
maaned = maaneder[dato.getUTCMonth()]
aar = String(dato.getUTCFullYear()).substr(-2)
time = dato.getUTCHours()
minut = dato.getUTCMinutes()
sekund = dato.getUTCSeconds()

if (dagIMaaneden < 10) dagIMaaneden = "0"+dagIMaaneden
if (time < 10) time = "0"+time
if (minut < 10) minut = "0"+minut
if (sekund < 10) sekund = "0"+sekund

udloebsdato = dag+", "+dagIMaaneden+"-"+maaned+"-"+aar+"
"+time+":"+minut+":"+sekund+" GMT"

document.cookie = "navn=vaerdi%20med%20mellemrum; path=/;
expires="+udloebsdato


 
 
Claus Sørensen (29-08-2002)
Kommentar
Fra : Claus Sørensen


Dato : 29-08-02 13:15

Jonas Koch Bentzen wrote:

>
http://developer.netscape.com/docs/manuals/js/client/jsref/cookies.htm#1002170.
> Nuvel, jeg bilder mig ind, jeg har fundet det rigtige format for
> udløbsdatoen, og det er:
>
> Thursday, 29-Aug-02 13:28:00 GMT

Det skal ikke undre mig, at du har ret, men datoer bør kunne angives efter
ISO-standarden ISO 8601:

ÅÅÅÅ-MM-DD TT:MM:SS [Z]

Hvor:

- ÅÅÅÅ er årstallet med 4 cifre (0000-9999).
- MM er måneden som 2 cifre (00-12).
- DD er dag i måneden som 2 cifre (01-31).
- TT er timetallet som 2 cifre (00-23).
- MM er minuttallet som 2 cifre (00-59).
- SS er antallet af sekunder som 2 cifre (00-59).
- [Z] er tidszonen angivet med tre eller fire bogstaver.

Man kan altid nøjes med mindre nøjagtig angivelse, ved at undlade elementer
i rækkefølgen SS, MM, TT, DD og MM.

De herligste hilsner
--
| Claus Sørensen | Jeg vil leve i en verden, hvor al kommunikation
|--------------------| er baseret på frie og åbne standarder, så enhver
| cs@chbs.dk | har friheden til at vælge.
| http://www.chbs.dk | Claus Sørensen, 2001

Jonas Koch Bentzen (29-08-2002)
Kommentar
Fra : Jonas Koch Bentzen


Dato : 29-08-02 14:58

Claus Sørensen wrote:
> Jonas Koch Bentzen wrote:
>
>
> http://developer.netscape.com/docs/manuals/js/client/jsref/cookies.htm#1002170.
>
>>Nuvel, jeg bilder mig ind, jeg har fundet det rigtige format for
>>udløbsdatoen, og det er:
>>
>>Thursday, 29-Aug-02 13:28:00 GMT
>
>
> Det skal ikke undre mig, at du har ret, men datoer bør kunne angives efter
> ISO-standarden ISO 8601

Netscape-specifikationen af cookier er også at regne for en standard, og
den kan man ikke bare ignorere og så bruge en ISO 8601-formatering af
udløbsdatoen.

Godt virker virker det som om, browserne kan forstå den
ikke-standard-dato, som toGMTString() giver, men ISO 8601-formateringen
er så anderledes, at jeg er ret sikker på, man ville få problemer, hvis
man brugte den i cookier.


Claus Sørensen (29-08-2002)
Kommentar
Fra : Claus Sørensen


Dato : 29-08-02 17:11

Jonas Koch Bentzen wrote:

> Claus Sørensen wrote:
>>
>> Det skal ikke undre mig, at du har ret, men datoer bør kunne angives
>> efter ISO-standarden ISO 8601
>
> Netscape-specifikationen af cookier er også at regne for en standard, og
> den kan man ikke bare ignorere og så bruge en ISO 8601-formatering af
> udløbsdatoen.
>
> Godt virker virker det som om, browserne kan forstå den
> ikke-standard-dato, som toGMTString() giver, men ISO 8601-formateringen
> er så anderledes, at jeg er ret sikker på, man ville få problemer, hvis
> man brugte den i cookier.

Jeg vil undersøge det og vende tilbage.

De herligste hilsner
--
| Claus Sørensen | Jeg vil leve i en verden, hvor al kommunikation
|--------------------| er baseret på frie og åbne standarder, så enhver
| cs@chbs.dk | har friheden til at vælge.
| http://www.chbs.dk | Claus Sørensen, 2001

Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408929
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste