[php] cookies met niet-IE browsers

Pagina: 1
Acties:

  • bgever
  • Registratie: April 2002
  • Laatst online: 28-05-2021
Ik ben tegen een groot probleem opgelopen. Ik kan namelijk geen cookies maken in niet-IE browsers als Netcape, Mozilla en Phoenix.

Dit is erg vervelend.

Wat mij wel is opgevallen, dat de cookies van tweakers.net wel werken, en aangezien tnet ook uit php bestaat, vraag ik mij af wat het probleem is.

Ik heb het volgende test script voor een PHP 4.2.3 en een 4.1.2 server:
cookie.php:
PHP:
1
2
3
4
5
6
7
8
9
<?php
// Cookie test script
if($_GET[set]){
setcookie("testcookie", "ja", 3600, "", "", 0);
header("location: ".$_SERVER['PHP_SELF']);
}else{
echo "Cookie gevonden? >> ".$HTTP_COOKIE_VARS["testcookie"];
}
?>

eerst roep ik het script aan met cookie.php?set=ja, en daarna komt er in IE "ja" achter ">>" te staan. Dat betekent, dat de cookies werken. Als ik dat zelfde onder niet-IE browsers doe, werkt het niet.
Wat is hier het probleem? En waar ligt het aan?

Ik weet me er geen raad mee en een grondige google search heeft niets opgelevert... :X

  • bgever
  • Registratie: April 2002
  • Laatst online: 28-05-2021
Na 10.000× wat geprobeerd te hebben ben ik er achter.

voor de max. tijd die je aan het cookie geeft, moet je eerst de time() functie uithalen...
Dit werkt wél:
PHP:
1
2
3
4
5
6
7
8
9
<?php
// Cookie test script
if($_GET[set]){
setcookie("testcookie", "ja", time()+3600, "", "", 0);
header("location: ".$_SERVER['PHP_SELF']);
}else{
echo "Cookie gevonden? >> ".$HTTP_COOKIE_VARS["testcookie"];
}
?>

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

En dat komt omdat het de tijd waarop ie moet expiren is, niet de tijd die ie levend mag blijven vanaf het moment dat ie bij de browser terecht komt.

Kortom jij liet je cookie's op 1 januari 1970 om 1.00u expiren ;)
En daardoor is de cookie gelijk al ongeldig zodra ie aankomt bij de browser.

Btw, time() wordt ook in elk voorbeeld in de manual gebruikt, je had het dus al kunnen raden :)

  • CyberSnooP
  • Registratie: Augustus 2000
  • Laatst online: 31-03 16:47

CyberSnooP

^^^^ schrijft --->

Kan het nie laten om wat kleine tips te geven (uitdrukkelijk niet in volgorde van belangrijkheid, ze zijn allemaal even onbelangrijk):
• Netscape, Mozilla en Phoenix gebruiken allemaal de Gecko-engine en die is verantwoordelijk voor het afhandelen van de cookies.. het afzonderlijk uitproberen in die 3 browsers heeft weinig nut.. gebruik liever ook nog Opera erbij
• Je indexeert verkeerd in de $_GET-array in je if (je mist quotes om de key). Hieruit concludeer ik dat je niet code met het hoogste error_reporting level en dat is echt aan te bevelen.
• De laatste 3 parameters bij setcookie zoals jij die opgeeft kun je ook weglaten.. ze zijn als optioneel gespecificeerd en hoef je alleen op te geven als je van de default wilt afwijken.
• En het is weer echt iets voor IE om cookies die verlopen zijn lekker toch mee te sturen |:( (mini-troll)

[/blaat]

|_____vakje______|


  • bgever
  • Registratie: April 2002
  • Laatst online: 28-05-2021
Nou, weten we dat ook weer. Ik kan er ook niets aan doen, dat ik setcookie van een slechte tuto heb geleerd. Ik denk dat je dan ook wel mag aannnemen dat ik het wel begrepen heb, door een andere tuto wel te verstaan...
@CyberSnooP, bedankt voor die 2e opmerking over $_GET, dat wist ik nl nog niet, ik zal ff kijken in php.ini, daar meende ik zoeiets te hebben gezien...
Maar over punt 3 moet ik wel ff iets zeggen, ga eens het verschil bekijken hoe IE je cookie opslaat als je wél die laatste 3 gebruikt. Dan snap je waarom ik het zo doe.
Het 1e en laatse puntje wist ik al... Maar dat kon jij nat. ook niet ruiken.

Thnx to all ;)