Ik breek al de hele middag mijn hoofd hierover...

Met
<?php
unset($_COOKIE['abc']);
setcookie("abc", null, -2592000, "/");
?>
haal ik de cookie abc weg op pagina F.
Met
<?php
print_r($_COOKIE);
?>
zie ik dat cookie abc is verdwenen op pagina F.

Als ik daarna doorklik naar een andere pagina, bestaat cookie abc weer!
Hoe kan dat? Setcookie abc komt alleen voor op de uitlogpagina.
Mogelijk accepteren sommige browsers geen negatieve datums.

En die worden dan wellicht gelijk gesteld aan 0.

Een "0" als verloopdatum houdt in: totdat de browser gesloten wordt.

Heb je ook gekeken naar welke waarde dat "doorgestarte" cookie dan had? Waarschijnlijk was deze leeg? Je had dit ook kunnen testen door dat setcookie() statement een waarde te geven, bijvoorbeeld "should_be_deleted" zodat je weet dat dat het setcookie() statement was dat verantwoordelijk was voor het verlengen van het cookie, want nu ga je er vanuit dat dat de enige plek is waar het cookie wordt geset wat mogelijk niet het geval is (ergens nog een verdwaald setcookie() statement in code?). Zolang je niet weet wat de oorzaak van iets is, is het ook onverstandig om hier aannames over te doen. Een andere mogelijkheid is dat er ooit eenzelfde cookie is ingesteld met een ander pad?

Hoe dan ook.

Het is dus waarschijnlijk verstandiger om de cookie een lege waarde te geven en de verloopdatum in te stellen op een (geldig) tijdstip in het verleden. Dus zoiets:
<?php
setcookie('abc', '', time()-7200, '/');
?>


Als het belangrijk is dat het cookie direct uit $_COOKIE verdwijnt gebruik je unset(). Aan de andere kant, dit omvat meestal een state change in welk geval het eigenlijk de bedoeling is dat je (direct) je pagina ververst met een header('Location: ...'); gevolgd door een exit; statement.
Thomas bedankt voor de hints!
Uiteindelijk erachter gekomen hoe het zit.
Cookie abc is erin gezet met:
<?php
setcookie("abc", $abc, time()+60*60*24*360, "/", "www.mijnsite.nl", isset($_SERVER["HTTPS"]), true); // 360 dagen
?>
Dan kan je het cookie niet deleten met unset of setcookie zonder url.
Oplossing:
<?php
setcookie("abc", "should_be_deleted", time()-7200, "/", "www.mijnsite.nl", isset($_SERVER["HTTPS"]), true); // cookie eruit
?>
Mja je moet een cookie altijd verwijderen op de manier zoals deze ook is ingesteld.

Reageren