[php & cookie] Werkt wel in Mozilla, niet in IE

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
De situatie:

Ik heb een standaardlayout, die afhankelijk van de link (index.php?pagina=ditendat) de "inhoud" include. Op één zoon pagina (index.php?pagina=ikroepmaarwat) heb ik een formulier dat maar ééns in de 24 uur aangeklikt mag worden; het gaat om het uitbrengen van een donatie.
Dus dacht ik, ik neem een cookie die opslaat dat de gebruiker al heeft gestemd (niet helemaal waterdicht, maar voor mji acceptabel). Ik geef het formulier een hidden value mee, omdat het in feite selfsubmitting is. Dus:

<input type="hidden" name="submit"value="1">

Helemaal bovenaan mijn index.php heb ik de volgende code staan:

<?php
if (IsSet($submit) AND $submit="1"){
if(isset($_COOKIE['bezocht'])){ }
else {
setcookie ('bezocht' , 'inderdaad', time() + 120 , '/' , 'mijndomein.nl');
}
}
?>

De timer staat nu ff op twee minuten om te testen en de dubbele test met submit is omdat ik aan mezelf begon te twijfelen.

Deze code werkt dus prima als je de site met Mozilla bezoekt, maar totaal niet met IE. En uiteraard heb ik meerdere computers geprobeert, verschillende cookie settings, enzovoorts. Maar het lijkt erop dat er met IE niet eens een cookie wordt geset; want als ik de beveiliging op maximaal zet, geeft ie nog geen waarschuwing.

Wat gaat er mis?

Acties:
  • 0 Henk 'm!

  • blizt
  • Registratie: Januari 2003
  • Laatst online: 11-12-2024

blizt

Wannabe-geek

PHP:
1
2
3
4
if(isset($_COOKIE['bezocht'])){ }
else {
setcookie ('bezocht' , 'inderdaad', time() + 120 , '/' , 'mijndomein.nl');
}

offtopic:
Beetje vreemde constructie hè?
Kan je niet beter 'n if(!isset ( .... ) ) doen dan?
Lijkt me logischer, dan is die else overbodig :)

United we stand, and divided we fall


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Leg me dat offtopic-deel eens uit als je wilt, want die cookie moet natuurlijk alleen geset worden als het formulier is verstuurd... Of begrijp ik je verkeerd?

Acties:
  • 0 Henk 'm!

  • We Are Borg
  • Registratie: April 2000
  • Laatst online: 20:04

We Are Borg

Moderator Wonen & Mobiliteit / General Chat
Verwijderd schreef op 28 september 2004 @ 13:25:
Leg me dat offtopic-deel eens uit als je wilt, want die cookie moet natuurlijk alleen geset worden als het formulier is verstuurd... Of begrijp ik je verkeerd?
Jij doet nu het volgende:

bestaat cookie -> doe dan niks -> anders doe cookie zetten

Wat blizti imo terecht zegt kan je beter zo doen:

bestaat cookie _niet_ -> cookie zetten

Snap je :) ?

Dus:

PHP:
1
2
3
4
5
6
7
<?php
if ($_SERVER['REQUEST_METHOD'] == "POST") {
if(!isset($_COOKIE['bezocht'])){ // let op het uitroepteken
setcookie ('bezocht' , 'inderdaad', time() + 120 , '/' , 'mijndomein.nl');
}
}
?>

[ Voor 21% gewijzigd door We Are Borg op 28-09-2004 13:34 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik ben officieëel aangekomen op het punt dat je dingen te moeilijk gaat zien :D. Sorry blizt, je hebt helemaal gelijk. Feit blijft dat t zaakje niet fatsoenlijk werkt, ook niet met deze wijziging.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik ben inmiddels wat verder met proberen, het setten, lezen en deleten van cookies gaat prima, zolang ik maar niet verder ga dan naam en waarde.

Zodra ik er tijd, pad en domein aan toevoeg, dan werkt het niet meer, maar mijn script geeft ook geen fout oid.

Dus:
PHP:
1
2
3
<?
setcookie("naam", "waarde");
?>

werkt als een trein, maar

PHP:
1
2
3
<?
setcookie("naam", "waarde", time()+60, "/", $HTTP_HOST);
?>

... of elke kortere versie werkt gewoon niet. Wat doe ik fout?

Acties:
  • 0 Henk 'm!

Verwijderd

PHP:
1
$HTTP_HOST = $_SERVER['HTTP_HOST'];


?

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Nope, ook dat doet t m niet. Firefox fluit er nog steeds doorheen, maar IE doet stoïcijns niets... Ik begin aan mezelf te twijfelen.

Kijk rustig ff mee:
http://www.djringtone.nl/hj.php: Om te testen:
PHP:
1
2
3
<?php
print_r($_COOKIE);
?>

http://www.djringtone.nl/1.php set de cookie:
PHP:
1
2
3
<?php
setcookie("bezocht", "inderdaad");
?>

http://www.djringtone.nl/1weg.php haalt diezelfde cookie weer weg.
Tot zover werkt alles, maar het gaat om deze:
http://www.djringtone.nl/1check.php?submit=1 met deze code:
PHP:
1
2
3
4
5
6
7
8
9
10
11
<?php
if(isset($_COOKIE['bezocht'])){
echo 'Jaja, die cookie is er al!'; } 
else {
if(isset($submit)){ 
$zolang = time()+60;
setcookie("bezocht", "inderdaad", $zolang, "/", $_SERVER['HTTP_HOST']);
echo 'Cookie gebakken';
}
}
?>


Dus bij het bezoek van de laatste link zou er OF moeten staan "Jaja, die cookie is er al", OF er moet staan "Cookie gebakken", maar dan moet ook wel gebakken zijn!....

Ziet iemand de boom in dit bos?

Verwijderd

Topicstarter
Zou t iets met SP2 te maken kunnen hebben?

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Nee, ik denk dat je een caching probleem hebt. Ik heb een plugin voor IE die dezelfde pagina die open staat in een nieuw venster nogmaals kan openen, en daar doet die print_r($_COOKIE) het wel. Kijk dus even naar de cache-headers.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Verwijderd

Topicstarter
Misschien dat je mij omwille van het testen ff naar die plugin kunt verwijzen?
Ik zal ondertussen eens ff verder zoeken.

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Ik geloof dat het een extension voor Firefox was, eentje deed de huidige site openen in IE, en eentje liet de huidige site vanuit IE zien in Firefox. Met die laatste extension kwam die "nieuw venster" functionaliteit mee. Ik zal eens zoeken.

Edit: Hier zat ie in geloof ik:
http://www.iosart.com/firefox/firefoxview/

[ Voor 17% gewijzigd door NMe op 29-09-2004 22:18 ]

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Verwijderd

Topicstarter
Handige plugin! Helaas ben ik er niet verder mee gekomen dan ik al was, want de conclusie blijft: Firefox geniet van mijn script, en IE negeert het gewoon (ofzo).

Nu ben ik ff verder gaan searchen op GOT en kwam dit tegen:

PHP:
1
2
3
4
//add no cache headers
header("Expires: monday, 1 jan 1980 00:00:00 gmt");
header("Cachea-Control: no-cache, must-revalidate");
header("Pragma: no-cache");


Dus dat heb ik voor mijn codes van hierboven gezet, maar het effect blijft hetzelfde... Wat kan ik anders nog doen met de cache headers?

Verwijderd

Cache headers gaan sowieso over de pagina zelf, en niet over het cookie.

Je kunt eens proberen om "accept cookies" (wat in IE6 dus standaard uit staat, daar heb je toch op gelet he?) in plaats van op `Accept' op `Prompt' te zetten.

Dan kun je in elk geval zien of de cookies goed aankomen èn de goede waarden bevatten.

Verwijderd

Topicstarter
Owja, ik heb het op Prompt gezet al, en iedere site bombardeert me met cookies (ga voor de grap maar een naar nu.nl, behalve mijn eigen brouwsel...

  • linksnl
  • Registratie: Februari 2002
  • Niet online
Ik heb net ff via telnet de headers van http://www.djringtone.nl/1check.php?submit=1 bekeken.
Hieruit blijkt dat je cookie wel wordt gezet, maar ook dat de tijd op je server achter loopt.
Ik heb om 12:29 (GMT +2) die pagina opgevraagd en kreeg de volgende headers:
code:
1
2
3
4
5
Date: Thu, 30 Sep 2004 10:27:01 GMT
..
Set-Cookie: bezocht=inderdaad; expires=Thu, 30-Sep-04 10:28:11 GMT;
  path=/; domain=www.djringtone.nl
..


Je cookie expired dus voordat mijn browser hem ontvangt...

Verwijderd

Topicstarter
|:( Ongelooflijk. Daar had ik dus nóóit aangedacht. Maar ik ben nu wel heel erg benieuwd waarom Firefox dan wel werkt...

  • linksnl
  • Registratie: Februari 2002
  • Niet online
Verwijderd schreef op 30 september 2004 @ 12:40:
|:( Ongelooflijk. Daar had ik dus nóóit aangedacht. Maar ik ben nu wel heel erg benieuwd waarom Firefox dan wel werkt...
Het lijkt erop dat Firefox rekening houdt met het tijdsverschil tussen de server en de computer
Pagina: 1