[php] Isset functie voor controle cookie werkt niet

Pagina: 1
Acties:
  • 135 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

  • w00d
  • Registratie: Juni 2004
  • Laatst online: 12:59
Hoi,

De bedoeling is dat de er eerst gekeken wordt of de cookie bestaat, zoja dan de bijhorende code uitvoeren, zo nee dan een andere code. Vrij logisch.

Als de cookie bestaat dan gaat het prima, maar is hij er niet dan gebeurd er niks. Het lijkt erop dat hij altijd naar de isset waarde true kijkt en dus niet als false.

code:
1
2
3
4
5
6
7
8
9
10
11
12
<?php
 
    // controleer eerst of het cookie bestaat 
    if(isset($_COOKIE['style'])) { 
    // cookie bestaat, lees de waarde uit 
    $gekozenstijl = $_COOKIE['style']; 
    } else { 
    // cookie bestaat niet 
    setcookie("style", "style_normal", time()+3600000, "/");
    $gekozenstijl="style_normal";
    } 
?>

Als ik de setcookie code onder het if [true] gedeelte zet dan wordt die gewoon keurig uitvoerd dus daar opzich ligt het niet aan, denk ik.

Het gedeelte van else wordt dus gewoon niet uitgevoerd als de cookie niet bestaat. Na een speur tochje op internet ben ik er helaas nog niet uitgekomen. Hoop van dit soort gelijke codes gezien, maar kan helaas niet vinden wat ik fout doe.

Iemand een ideetje?

Acties:
  • 0 Henk 'm!

  • TweakBoy
  • Registratie: Augustus 2001
  • Laatst online: 14-09 22:16

TweakBoy

---

PHP:
1
2
# als je ook dit doet?
if( isset( $_COOKIE['style'] ) && !empty( $_COOKIE['style'] ) )

---


Acties:
  • 0 Henk 'm!

  • w00d
  • Registratie: Juni 2004
  • Laatst online: 12:59
Helaas,

PHP:
1
2
3
4
5
6
7
8
9
10
11
<?php
// controleer eerst of het cookie bestaat 
    if( isset( $_COOKIE['style'] ) && !empty( $_COOKIE['style'] ) ) { 
    // cookie bestaat, lees de waarde uit 
    $gekozenstijl = $_COOKIE['style']; 
    } else { 
    // cookie bestaat niet 
    setcookie("style", "style_normal", time()+3600000, "/");
    $gekozenstijl="style_normal";
    } 
?>


Ik heb echt het idee dat ik iets kleins over het hoofd zie, maarja..

Acties:
  • 0 Henk 'm!

  • --MeAngry--
  • Registratie: September 2002
  • Laatst online: 19-09 16:35

--MeAngry--

aka Qonstrukt

Voor array's gebruik ik meestal array_key_exists. Ik weet eigenlijk niet wat sneller of efficiënter is.

Wat geeft print_r($_COOKIE) btw als je eens kijkt terwijl je verwacht datie false moet returnen.

[ Voor 32% gewijzigd door --MeAngry-- op 11-04-2007 23:53 ]

Tesla Model Y RWD (2024)


Acties:
  • 0 Henk 'm!

  • w00d
  • Registratie: Juni 2004
  • Laatst online: 12:59
Array ( [style] => 2 [stijl] => -1 )

stijl is een eerdere poging van de cookies. Die zou er nu niet meer moeten zijn.

------------------------
Dit werkt nu wel:
PHP:
1
2
3
4
5
6
7
8
// controleer eerst of het cookie bestaat 
    if(isset($_COOKIE['style'])) { 
    // cookie bestaat, lees de waarde uit 
    $gekozenstijl = $_COOKIE['style']; 
    }
        if ($_COOKIE['style'] == "2"){
        setcookie("style", "style_bigger", time()+3600000, "/");
        }


Aangezien de waarde "2" is als de cookie er niet is, zou ik het ook zo kunnen opvangen. Maarja netjes is anders vind ik.

[ Voor 65% gewijzigd door w00d op 12-04-2007 00:06 ]


Acties:
  • 0 Henk 'm!

  • GlowMouse
  • Registratie: November 2002
  • Niet online
Draai ik dit script:
PHP:
1
2
3
4
5
6
// controleer eerst of het cookie bestaat 
    if(isset($_COOKIE['bestaatniet'])) { 
       echo 'a';
    } else { 
       echo 'b';
    }

Dan krijg ik b te zien. Het lijkt er dus op dat er iets anders speelt. De cookievar style staat bij jou op 2; dat kan jouw gegeven script nooit doen. Heb je je cookies al eens gewist voor jouw domein?

Acties:
  • 0 Henk 'm!

  • w00d
  • Registratie: Juni 2004
  • Laatst online: 12:59
Heb ff alle cookies weggegooid, vervolgens code even vereenvoudigd zoals hierboven en hij presteerd het om gewoon A te laten zien als er geen cookies zijn...

Hmm ik snap er geen boom van, maar als ik de naam van de cookie veranderd krijg ik keurig B te zien, maak ik van de naam weer style dan is het weer A. En er zijn echt geen cookies meer op mijn pc..

Maar ok is in ieder geval duidelijk.

[ Voor 43% gewijzigd door w00d op 12-04-2007 00:14 ]


Acties:
  • 0 Henk 'm!

  • GlowMouse
  • Registratie: November 2002
  • Niet online
w00d schreef op donderdag 12 april 2007 @ 00:11:
Heb ff alle cookies weggegooid, vervolgens code even vereenvoudigd zoals hierboven en hij presteerd het om gewoon A te laten zien als er geen cookies zijn...

Hmm ik snap er geen boom van, maar als ik de naam van de cookie veranderd krijg ik keurig B te zien, maak ik van de naam weer style dan is het weer A. En er zijn echt geen cookies meer op mijn pc..

Maar ok is in ieder geval duidelijk.
Dan heb je óf nog cookies ingesteld staan óf er staat nog wat boven dit script dat de rest beïnvloedt.

Acties:
  • 0 Henk 'm!

  • w00d
  • Registratie: Juni 2004
  • Laatst online: 12:59
Er staat verder niks in het script, maar ik merk net nadat ik de cookie met de nieuwe naam had weggegooid het weer niet werkt. Dus ergens zit er iets niet lkkr met de cookies en mijn laptop.

Daarbij is het ook apart dat nadat ik de nieuwe naam had gegeven aan de cookie de output van print_r dit is: Array ( [style] => 2 [stijl] => -1 [intranetlayout] => style_normal )

Hij blijft dus toch iets van de oude zooi zien.

Ik ga het morgen wel even op me werk testen. Maar het is in ieder geval een stukje duidelijk.

Thnxs iedereen.

Acties:
  • 0 Henk 'm!

  • --MeAngry--
  • Registratie: September 2002
  • Laatst online: 19-09 16:35

--MeAngry--

aka Qonstrukt

Hoe verwijder je die oude cookies? Want blijkbaar gaat het daar niet goed.

Tesla Model Y RWD (2024)


Acties:
  • 0 Henk 'm!

Verwijderd

--MeAngry-- schreef op woensdag 11 april 2007 @ 23:52:
Voor array's gebruik ik meestal array_key_exists. Ik weet eigenlijk niet wat sneller of efficiënter is.
Hangt ervan af welke werkt. Ik heb al gemerkt dat voor POST en GET isset() perfect werkt, maar voor SESSION bvb niet.

Nog iets van in de PHP manual, waar je wel op moet letten:
Cookies will not become visible until the next loading of a page that the cookie should be visible for. To test if a cookie was successfully set, check for the cookie on a next loading page before the cookie expires. Expire time is set via the expire parameter. A nice way to debug the existence of cookies is by simply calling print_r($_COOKIE);.

Acties:
  • 0 Henk 'm!

  • w00d
  • Registratie: Juni 2004
  • Laatst online: 12:59
--MeAngry-- schreef op donderdag 12 april 2007 @ 00:34:
Hoe verwijder je die oude cookies? Want blijkbaar gaat het daar niet goed.
Gewoon uit me temp internet files > aanklikken en delete..
Ik hou er rekening mee dat de cookie pas na een refresh actief is, dat vormt opzich geen probleem.

Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

w00d schreef op donderdag 12 april 2007 @ 12:02:
[...]


Gewoon uit me temp internet files > aanklikken en delete..
Ik hou er rekening mee dat de cookie pas na een refresh actief is, dat vormt opzich geen probleem.
IE? waarom niet via Tools->Internet Options->General->Delete Cookies?

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 02:21

Janoz

Moderator Devschuur®

!litemod

Daarmee heb je de sessiecookies nog niet verwijderd. Met dit soort dingen kun je veel beter firefox icm de webdevelopers toolbar gebruiken. Hierbij heb je veel meer controle over het wel of neit aanwezig zijn van cookies. Daarnaast kun je ook gewoon kijken welke cookies er al zijn geset. Ik denk dat je op dit moment twee dingen aan het debuggen bent. Je applicatie en internet explorer. Je kunt nooit weten of de fout nu door IE of door je applicatie komt.

--

Deze reactie was @w00d, niet @Erkens. Sessiecookies opmerking slaat dus op het verwijderen uit de temp inet files..

[ Voor 12% gewijzigd door Janoz op 12-04-2007 12:11 ]

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • RedHat
  • Registratie: Augustus 2000
  • Laatst online: 16:12
iig ff zo'n firefox bar installen zodat je kan zien wat van cookies er geset worden.

+ Let wel ff op dat je de waarde van je cookie niet controleerd op input ;)

Dus kijk wat van cookies met welke inhoud er geplaatst worden, en ga dan verder kijken.

Misschien bestaat een bepaalde var die je set wel niet, of set hij een leeg cookie, dan komt ie al niete door de checks heen met isset, alleen empty();

voor de rest is het beetje debuggen. Lees de debug-faq even door dat zal een hoop helpen ;)

Acties:
  • 0 Henk 'm!

Verwijderd

Je hebt de web developer toolbar niet nodig voor cookies te bekijken in Firefox ;)
Bij Options > Privacy is er een knop 'View cookies'.

Acties:
  • 0 Henk 'm!

  • CH4OS
  • Registratie: April 2002
  • Niet online

CH4OS

It's a kind of magic

En wat als je
PHP:
1
2
3
4
5
6
7
8
if(!empty($_COOKIE['style']))
{
    // doe iets
}
else
{
    // doe iets anders
}
probeert?

Hou er rekening mee dat isset() alleen kijkt of de variabele bestaat en niet checkt of het een waarde heeft.
En aan een lege cookie, of waardes als ' ' (alleen een spatie) heb je niets... ;)
Dat kan je eventueel ook afvangen, door op de waardes te controleren welke waardes er mogelijk zijn natuurlijk... :)
Janoz schreef op donderdag 12 april 2007 @ 12:09:
Daarmee heb je de sessiecookies nog niet verwijderd. Met dit soort dingen kun je veel beter firefox icm de webdevelopers toolbar gebruiken. Hierbij heb je veel meer controle over het wel of neit aanwezig zijn van cookies. Daarnaast kun je ook gewoon kijken welke cookies er al zijn geset. Ik denk dat je op dit moment twee dingen aan het debuggen bent. Je applicatie en internet explorer. Je kunt nooit weten of de fout nu door IE of door je applicatie komt.
IE heeft ook een developer toolbar, maar weet even niet meer precies uit mijn hoofd of je daarmee ook de cookies kan bekijken, ik dacht van wel... :)

[ Voor 49% gewijzigd door CH4OS op 12-04-2007 16:14 ]


Acties:
  • 0 Henk 'm!

  • w00d
  • Registratie: Juni 2004
  • Laatst online: 12:59
Ik ben er al uit. Ik moet gewoon niet bij IE7 handmatig de cookies weggooien want dat vind die niet leuk, simpel gezegt. Ik heb het nu zo:

PHP:
1
2
3
4
5
6
if(isset($_COOKIE['intranetlayout'])) { 
    // cookie bestaat, lees de waarde uit 
    $gekozenstijl = $_COOKIE['intranetlayout']; 
    }else{
    $gekozenstijl = "style_normal";
    }


En om de gebruiker de instellingen van de layout te laten veranderen:
PHP:
1
2
3
4
5
6
7
8
9
    //if font size changed, then set cookie with the style. If style is normal then just delete cookie
    if($_GET['layout'] == "normal"){
    setcookie("intranetlayout", "", time()-3600000);
    //Als we de font willen vergroten halen we eerst de oude cookie weg en plaatsten de nieuwe. Tevens  zetten we vast de gekozenstijl op bigger omdat een cookie pas na de volgende refresh actief wordt.
    }elseif($_GET['layout'] == "bigger"){
    setcookie("intranetlayout", "", time()-3600000);
    setcookie("intranetlayout", "style_bigger", time()+3600000, "/");
    $gekozenstijl = "style_bigger";
    }


Lijkt prima te werken :*)

Acties:
  • 0 Henk 'm!

  • CH4OS
  • Registratie: April 2002
  • Niet online

CH4OS

It's a kind of magic

En hoe wil je een style geven, als je cookie ($_COOKIE['intranetlayout']) geen waarde heeft (maar wél bestaat) of een andere waarde heeft dan gewenst is? ;)

Je kan dus het best de check zo doen:
PHP:
1
2
3
4
5
6
7
8
9
10
if($_COOKIE['intranetlayout'] == "normal" || $_COOKIE['intranetlayout'] == "bigger"))
{ 
      // cookie bestaat, lees de waarde uit 
      $gekozenstijl = $_COOKIE['intranetlayout']; 
}
else
{
    $gekozenstijl = "style_normal";
}
?>
Dan ben je je er namelijk van verzekerd dat je ook een stylesheet kan laden, die je ook écht hebt. ;)

offtopic:
Ik zie dat je op je eigen site overigens een dubbele doctype gebruikt... Lijkt me eentje overbodig... ;)

[ Voor 9% gewijzigd door CH4OS op 12-04-2007 17:02 ]


Acties:
  • 0 Henk 'm!

  • Morax
  • Registratie: Mei 2002
  • Laatst online: 20-09 00:30
GJ-tje schreef op donderdag 12 april 2007 @ 16:59:
En hoe wil je een style geven, als je cookie ($_COOKIE['intranetlayout']) geen waarde heeft (maar wél bestaat) of een andere waarde heeft dan gewenst is? ;)

Je kan dus het best de check zo doen:
PHP:
1
2
3
4
5
6
7
8
9
10
if($_COOKIE['intranetlayout'] == "normal" || $_COOKIE['intranetlayout'] == "bigger"))
{ 
  // cookie bestaat, lees de waarde uit 
  $gekozenstijl = $_COOKIE['intranetlayout']; 
}
else
{
  $gekozenstijl = "style_normal";
}
?>
Dan ben je je er namelijk van verzekerd dat je ook een stylesheet kan laden, die je ook écht hebt. ;)
Dan zou ik het eerder zo doen, scheelt je ook problemen als de cookie helemaal niet bestaat (undefined array key) ;)
PHP:
1
2
3
4
5
6
7
8
$styles = array('normal', 'bigger');

if(isset($_COOKIE['intranetlayout']) && in_array($_COOKIE['intranetlayout'], $styles)){
     // cookie bestaat, lees de waarde uit 
     $gekozenstijl = $_COOKIE['intranetlayout'];
}else{
     $gekozenstijl = "style_normal";
}

What do you mean I have no life? I am a gamer, I got millions!


Acties:
  • 0 Henk 'm!

  • w00d
  • Registratie: Juni 2004
  • Laatst online: 12:59
@CJ-tje

Hij werkt helaas niet bij mij. Die van Morax zal ik vanavond nog is even testen. Nu eerst maar is naar huis.
Pagina: 1