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

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
Cokkie bliver ikke sat
Fra : Kent Andersen


Dato : 11-12-01 16:31

Hej!

Jeg har lavet et lille testscript, der bare skal sætte en cookie.

Det virker på forskellige maskiner, men på en enkelt fejler det. Cookien
bliver ikke sat.

Jeg har kompileret apache og php på denne maskine. Versionerne er for
apaches vedkommende ver. 1.3.20 og for php's 4.0.6.

Tilsvarende versioner kompileret på samme måde virker på andre maskiner.

Jeg har forsøgt at kompilere både apache og php igen, men med samme
resultat.

Her er den simple testkode, som vel at mærke virker stortset over alt.

<?

SETCOOKIE("test", "Hej", time(), "/");

if ($HTTP_COOKIE_VARS["test"]) {
echo "$HTTP_COOKIE_VARS[test] med dig.";
}
else {
echo "Du har tabt!!!";
}

?>

Jeg håber, at I har en idé til, hvad jeg skal gøre ved denne ene server for
at få det til at virke.


M.v.h.

Kent



 
 
Mogens Meier Christe~ (11-12-2001)
Kommentar
Fra : Mogens Meier Christe~


Dato : 11-12-01 16:47


"Kent Andersen" <kent.and@get2net.dk> wrote in message
news:2FpR7.110$Qv5.7373@news.get2net.dk...

> SETCOOKIE("test", "Hej", time(), "/");
>
> if ($HTTP_COOKIE_VARS["test"]) {

RTFM (hvor 'F' betyder "fine" ;)

Jeg quoter fra http://dk.php.net/manual/en/function.setcookie.php :

Common Pitfalls:


a.. Cookies will not become visible until the next loading of a page that
the cookie should be visible for

Dvs. du kan ikke se den før næste gang!!!

Derudover er det hvor du skriver "time()" tidspunktet hvor cookien bliver
forældet og skal slettes, du bør give den lidt tid at leve i før den skal
dø!

Manualen har flere glimragende og fremstående eksempler, f.eks.

setcookie ("TestCookie", $value,time()+3600); /* expire in 1 hour */



--
Mvh. Mogens
www.momech.dk




Mogens Meier Christe~ (11-12-2001)
Kommentar
Fra : Mogens Meier Christe~


Dato : 11-12-01 16:50

Jeg glemte lige:


> > if ($HTTP_COOKIE_VARS["test"]) {

Det ville være sikrere at skrive:

if ( isset($HTTP_COOKIE_VARS["test"]) ) {

da også kan klare cookies der indeholder "0" og "FALSE" og ikke får nogen
warnings selvom de er slået til (hvilket de IMHO burde være i et
udviklingsmiljø).


--
Mvh. Mogens
www.momech.dk




Dennis T. (11-12-2001)
Kommentar
Fra : Dennis T.


Dato : 11-12-01 16:50

Kent Andersen wrote:
> Jeg har lavet et lille testscript, der bare skal sætte en cookie.
> Det virker på forskellige maskiner, men på en enkelt fejler det. Cookien
> bliver ikke sat.
> SETCOOKIE("test", "Hej", time(), "/");

$date = date("l, d-M-y H:i:s", time()+3600). "GMT";
setcookie("test", "test", $date);

Du må ikke bruge time() til at sætte cookie'en, ikke alle browsere kan
forstå unixtime (visse versioner af ie). Desuden har du ikke nogen
"timeout" på...



Morten Winther (11-12-2001)
Kommentar
Fra : Morten Winther


Dato : 11-12-01 17:03


"Dennis T." <viol8r@technologist.com> wrote in message
news:3c162b44$0$25399$edfadb0f@dspool01.news.tele.dk...

> $date = date("l, d-M-y H:i:s", time()+3600). "GMT";
> setcookie("test", "test", $date);
>
> Du må ikke bruge time() til at sætte cookie'en, ikke alle browsere kan
> forstå unixtime (visse versioner af ie). Desuden har du ikke nogen
> "timeout" på...

Vrøvl!

Du skal netop bruge time(). RTF(ine)M

PHP sætter selv den rigtige tid i headeren.

F.eks.:
setcookie ("TestCookie", "Hejsa",time()+3600); /* expire in 1 hour */

HTTP/1.1 200 OK
Date: Tue, 11 Dec 2001 17:02:22 GMT
Server: Apache/1.3.12 (Unix) PHP/4.0.6 PHP/3.0.15
X-Powered-By: PHP/4.0.6
Set-Cookie: TestCookie=Hejsa; expires=Tue, 11-Dec-01 18:02:22 GMT
Connection: close
Content-Type: text/html

/ morten





Dennis T. (11-12-2001)
Kommentar
Fra : Dennis T.


Dato : 11-12-01 21:27

Morten Winther wrote:

>
> "Dennis T." <viol8r@technologist.com> wrote in message
> news:3c162b44$0$25399$edfadb0f@dspool01.news.tele.dk...
>
>> $date = date("l, d-M-y H:i:s", time()+3600). "GMT";
>> setcookie("test", "test", $date);
>>
>> Du må ikke bruge time() til at sætte cookie'en, ikke alle browsere kan
>> forstå unixtime (visse versioner af ie). Desuden har du ikke nogen
>> "timeout" på...
>
> Vrøvl!
>
> Du skal netop bruge time(). RTF(ine)M

Selv vrøvl... har efterhånden prøvet det så mange gange efterhånden. Den
skal stå i ovennævnte format ellers virker det ikke i visse ie-browsere.

Jeg har også selv altid sat den med time, men da en stor del brugere
brokkede sig og vi selv så problemet på et par win-boxe, så var løsnignen
ovenstående - og det virker upåklageligt.

Om det er en fejl i php eller ie ved jeg ikke - men det er ihvertfald
iriterende :)



Mogens Meier Christe~ (11-12-2001)
Kommentar
Fra : Mogens Meier Christe~


Dato : 11-12-01 21:56

> Selv vrøvl... har efterhånden prøvet det så mange gange efterhånden. Den
> skal stå i ovennævnte format ellers virker det ikke i visse ie-browsere.

Og hvis problem/skyld er det? ;)

> Jeg har også selv altid sat den med time, men da en stor del brugere
> brokkede sig

De burde klage til M$ i stedet.

> Om det er en fejl i php eller ie ved jeg ikke - men det er ihvertfald
> iriterende :)

Ja, jeg er selv IE-bruger, men mere af nød end af lyst! Opera er meget
hurtigere og federe - og mere standard-kompatibel, men der er adskillige
store, vigtige sites der er er "ubrugelige" i alt andet end IE.

Menøh - nu er jeg vidst meget Off Topic.... Beklager! ;)

--
Mvh. Mogens
www.momech.dk




Morten Winther (11-12-2001)
Kommentar
Fra : Morten Winther


Dato : 11-12-01 22:20


"Dennis T." <viol8r@technologist.com> wrote in message
news:3c166c0d$0$62384$edfadb0f@dspool01.news.tele.dk...

> Selv vrøvl... har efterhånden prøvet det så mange gange efterhånden. Den
> skal stå i ovennævnte format ellers virker det ikke i visse ie-browsere.
>
> Jeg har også selv altid sat den med time, men da en stor del brugere
> brokkede sig og vi selv så problemet på et par win-boxe, så var løsnignen

Som du kunne se i min post laver php's funktion selv time() om til det
rigtige format: Tue, 11-Dec-01 18:02:22 GMT

Jeg skal ikke kunne sige om det gør det på din windoze, men sådan noget
bruger man jo heller ikke til en produktionsserver.

Så man kan roligt bruge time()+3600, da browseren aldrig ser unix-tiden, da
den bliver formateret inden headeren skrives.

/ morten




Dennis T. (11-12-2001)
Kommentar
Fra : Dennis T.


Dato : 11-12-01 23:03

Morten Winther wrote:
> Som du kunne se i min post laver php's funktion selv time() om til det
> rigtige format: Tue, 11-Dec-01 18:02:22 GMT

Som ikke altid kan forståes. Til forskel fra min kode, så bliver navnet på
dagen forkortet i din, såvidt jeg umiddelbart kan se. Måske er det, det som
visse ie versioner ikke kan forstå?


> Jeg skal ikke kunne sige om det gør det på din windoze, men sådan noget
> bruger man jo heller ikke til en produktionsserver.

Hvem har snakket noget om windows på produktionsserver? Har aldrig haft
brugt en windows som webserver.


> Så man kan roligt bruge time()+3600, da browseren aldrig ser unix-tiden,
> da den bliver formateret inden headeren skrives.

Åbenbart ikke.... Så har du ihvertfald hurtigt kunder i røret :)



Mogens Meier Christe~ (12-12-2001)
Kommentar
Fra : Mogens Meier Christe~


Dato : 12-12-01 13:01

"Dennis T." <viol8r@technologist.com> wrote in message
news:3c1682ce$0$62299$edfadb0f@dspool01.news.tele.dk...

> > Så man kan roligt bruge time()+3600, da browseren aldrig ser unix-tiden,
> > da den bliver formateret inden headeren skrives.

> Åbenbart ikke.... Så har du ihvertfald hurtigt kunder i røret :)

Hmm, jeg begynder at tro at årsagen er at dine kunders computer-ur står
forkert: Hvis f.eks. dine kunders computer er 3 timer foran betyder
time()+3600 at cookie'n skulle være slettet for 2 timer siden, mens ingen
expire date (som er resultatet af din brug af setcookie() ) laver en
sessioncookie der først dør når "kunden" er færdig med siden...

--
Mvh. Mogens
www.momech.dk
"Rullebannere burde forbydes!!!"



Morten Winther (11-12-2001)
Kommentar
Fra : Morten Winther


Dato : 11-12-01 22:28


"Dennis T." <viol8r@technologist.com> wrote in message
news:3c166c0d$0$62384$edfadb0f@dspool01.news.tele.dk...
> Morten Winther wrote:
>
> >
> > "Dennis T." <viol8r@technologist.com> wrote in message

> Selv vrøvl... har efterhånden prøvet det så mange gange efterhånden. Den
> skal stå i ovennævnte format ellers virker det ikke i visse ie-browsere.
>

Nu har jeg lige prøvet din kode:

$date = date("l, d-M-y H:i:s", time()+3600). "GMT";
setcookie("test", "test", $date);

Den virker faktisk slet ikke.

PHP forstår ikke $date, da denne skal være en int/unixtime.

Som resultat bliver cookien sat uden tidsparameter, hvilket betyder at
cookien vil blive slettet når browseren lukkes.

Din giver dette som header:

Set-Cookie: test=test

Den rigtige virker:

setcookie ("TestCookie", "Hejsa",time()+3600); /* expire in 1 hour */

Giver følgende:

Set-Cookie: TestCookie=Hejsa; expires=Tue, 11-Dec-01 18:02:22 GMT

/ morten









Dennis T. (11-12-2001)
Kommentar
Fra : Dennis T.


Dato : 11-12-01 22:58

Morten Winther wrote:
> Nu har jeg lige prøvet din kode:

Det var pseudo-kode, ikke direkte fra en php-fil.

> Den virker faktisk slet ikke.
> PHP forstår ikke $date, da denne skal være en int/unixtime.

$date = date("l, d-M-y H:i:s", time()+3600);
setcookie("login", "test", "$date GMT");

Denne virker fint - på alle browsere - servermæssigt er det seneste
php/apache på en linux 2.4-box.




Morten Winther (11-12-2001)
Kommentar
Fra : Morten Winther


Dato : 11-12-01 23:52


"Dennis T." <viol8r@technologist.com> wrote in message
news:3c1681a1$0$62299$edfadb0f@dspool01.news.tele.dk...
> Morten Winther wrote:
> > Nu har jeg lige prøvet din kode:
>
> Det var pseudo-kode, ikke direkte fra en php-fil.
>
> > Den virker faktisk slet ikke.
> > PHP forstår ikke $date, da denne skal være en int/unixtime.
>
> $date = date("l, d-M-y H:i:s", time()+3600);
> setcookie("login", "test", "$date GMT");
>
> Denne virker fint - på alle browsere - servermæssigt er det seneste
> php/apache på en linux 2.4-box.

Jeg kan ikke tro at den sætter nogen tidsparameter i cookien:

Hvis jeg bruge din metode bliver dette skrevet som header.

Set-Cookie: login=test

Har testet både med Solaris & freeBSD som platform.

Har du prøvet at se hvilken header der rent faktisk retuneres?

Evt gennem http://mbn.dk/q/

/ morten





Søg
Reklame
Statistik
Spørgsmål : 177505
Tips : 31968
Nyheder : 719565
Indlæg : 6408554
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste