Variabele uit cookie lezen

Status
Niet open voor verdere reacties.

DarkFeather

Gebruiker
Lid geworden
21 jan 2004
Berichten
134
Ik heb een script (kant-en-klaar van een site) waarin een cookie wordt aangemaakt:

PHP:
      setcookie("username", $HTTP_POST_VARS["login_user"], 0, "/");

Mijn vraag is, hoe kan ik de username weer uitlezen?
En wat moet ik doen om de cookie na een uur te laten vervallen, maar ook als de sessie wordt beeindigd?
 
Hoe ik het cookie moet weergeven weet ik nu al, even op php.net gekeken en het is eigenlijk zo logisch (en simpel) als wat:
PHP:
echo $username;
of
echo $_COOKIE["username"];

Nu wil ik alleen nog weten of ik een cookie na een uur kan laten verlopen, maar ook als de sessie wordt beeindigd. Hoe ik ze los van elkaar moet instellen weet ik. Alleen is het mogelijk om ze te combineren?
 
Laatst bewerkt:
Op deze manier wordt de cookie nooit aangemaakt :)
Check de syntax van setcookie ff, daar staat uitleg en worden voorbeelden gegeven :)

Succes :thumb:
 
Geplaatst door JPeetje
Op deze manier wordt de cookie nooit aangemaakt :)
Check de syntax van setcookie ff, daar staat uitleg en worden voorbeelden gegeven :)

Succes :thumb:

Ik snap zo niet wat je bedoelt. Bedoel je dat wat ik wil (dus en met tijd en met sessie) niet mogelijk is?
 
Laatst bewerkt:
Geplaatst door DarkFeather
Hoe ik het cookie moet weergeven weet ik nu al, even op php.net gekeken en het is eigenlijk zo logisch (en simpel) als wat:
PHP:
echo $username;
of
echo $_COOKIE["username"];

Nu wil ik alleen nog weten of ik een cookie na een uur kan laten verlopen, maar ook als de sessie wordt beeindigd. Hoe ik ze los van elkaar moet instellen weet ik. Alleen is het mogelijk om ze te combineren?
Niet $username, dit is dus dat ranzige superglobals gezeur, dat alleen op slecht geconfigureerde servers werkt. Gebruik $_COOKIE["naam"] of $HTTP_COOKIE_VARS["naam"], maar niet $naam.

Geplaatst door DarkFeather
Ik snap zo niet wat je bedoelt. Bedoel je dat wat ik wil (dus en met tijd en met sessie) niet mogelijk is?
Dat bedoel ik niet nee. De manier waarop je de cookie aanmaakt, van je 1e post, is prima, de syntax is goed, je geeft een naam, een waarde en een tijd op. Toch kan ik je garanderen dat deze cookie niet zal bestaan.
Daarom zei ik ook, check de syntax van setcookie() ff, met name de expire parameter.

Succes :thumb:

Btw, kun je in 't vervolg je posts editten voordat ik gepost heb ? :rolleyes:
 
Geplaatst door JPeetje
Niet $username, dit is dus dat ranzige superglobals gezeur, dat alleen op slecht geconfigureerde servers werkt. Gebruik $_COOKIE["naam"] of $HTTP_COOKIE_VARS["naam"], maar niet $naam.

Okee, dat snap ik. $username werkt wel (server=lycos-server). Ben zelf inmiddels ook zover dat ik snap dat superglobals beter zijn, alleen gaf ik aan dat het allebei mogelijk was.


Dat bedoel ik niet nee. De manier waarop je de cookie aanmaakt, van je 1e post, is prima, de syntax is goed, je geeft een naam, een waarde en een tijd op. Toch kan ik je garanderen dat deze cookie niet zal bestaan.
Daarom zei ik ook, check de syntax van setcookie() ff, met name de expire parameter.

Hij werkt anders goed hoor. De cookie wordt netjes aangemaakt en werkt zoals het moet. Ik kan de username ook uitlezen. En als je de sessie beeindigd vervalt de cookie ook nog.


Succes :thumb:

Btw, kun je in 't vervolg je posts editten voordat ik gepost heb ? :rolleyes:

Ik doe me best... ;)
 
Geplaatst door DarkFeather
Hij werkt anders goed hoor. De cookie wordt netjes aangemaakt en werkt zoals het moet. Ik kan de username ook uitlezen. En als je de sessie beeindigd vervalt de cookie ook nog.
Hm ... die 0 is dan waarschijnlijk voor een oneindig oude cookie. Normaal als je een cookie een timestamp (de tijd in seconden vanaf 01-01-1970 00:00:00) geeft die kleiner is dan de huidige timestamp (ondertussen 34 jaar verder, reken 34 jaar in seconden uit, is ondertussen al een 10-cijferig getal, zie ook time() ;)) dan wordt de cookie aangemaakt en meteen weer verwijderd. Zodra de huidige servertijd groter of gelijk is aan de verlooptijd van de cookie, wordt de cookie verwijderd. Kennelijk is er een uitzondering, de 0, wat ik ook nog niet wist :)

Succes verder :thumb:
 
Geplaatst door JPeetje
Hm ... die 0 is dan waarschijnlijk voor een oneindig oude cookie. Normaal als je een cookie een timestamp (de tijd in seconden vanaf 01-01-1970 00:00:00) geeft die kleiner is dan de huidige timestamp (ondertussen 34 jaar verder, reken 34 jaar in seconden uit, is ondertussen al een 10-cijferig getal, zie ook time() ;)) dan wordt de cookie aangemaakt en meteen weer verwijderd. Zodra de huidige servertijd groter of gelijk is aan de verlooptijd van de cookie, wordt de cookie verwijderd. Kennelijk is er een uitzondering, de 0, wat ik ook nog niet wist :)

Succes verder :thumb:

Geef je met die nul niet aan dat de cookie niet na een tijdsverloop moet vervallen, maar als de sessie beeindigd moet worden?

(maar nu weet ik nog steeds niet of ik sessie+tijd kan combineren in een cookie, zodat de cookie of aan het einde van de sessie vervalt of anders na een uur.)

34 jaar is trouwens 1.073.001.600 seconden. Dat je het even weet. (heb trouwens rekening gehouden met schrikkeljaren)
 
Laatst bewerkt:
Geplaatst door DarkFeather
Geef je met die nul niet aan dat de cookie niet na een tijdsverloop moet vervallen, maar als de sessie beeindigd moet worden?
Kan, ik ken de betekenis van die 0 als die parameter (nog) niet, maar persoonlijk verwacht ik niet dat hij daarvoor dient :)
Sessies worden namelijk server-side (op de server) op geslagen, terwijl de cookies client-side (op de pc van de bezoeker) opgeslagen, dus ik denk niet dat die dan met elkaar gaan communiceren. Maar het zou kunnen ja :p
(maar nu weet ik nog steeds niet of ik sessie+tijd kan combineren in een cookie, zodat de cookie of aan het einde van de sessie vervalt of anders na een uur.)
Uhm ... in php.ini kun je wel instellen hoe lang een sessie maximaal kan duren. Als men na 10 minuten het scherm niet gesloten heeft, maar de sessie ook niet vernieuwd heeft (door bijv. het scherm te vernieuwen), daar kan de sessie dan van komen te vervallen. Deze vervaltijd hangt af van de tijd die in php.ini staat. Van de cookie daarentegen kun je heel simpel instellen dat hij na een uur moet vervallen, simpelweg die '0' vervangen door 'time()+3600' (zonder '' uiteraard :))
34 jaar is trouwens 1.073.001.600 seconden. Dat je het even weet. (heb trouwens rekening gehouden met schrikkeljaren)
Dat klopt ongeveer wel ... jouw getal is ook 10 cijfers groot ... wil je de exacte seconden berekenen, dan moet je ff het exacte verschil tussen toen en nu uitrekenen ;)
 
Geplaatst door JPeetje
Kan, ik ken de betekenis van die 0 als die parameter (nog) niet, maar persoonlijk verwacht ik niet dat hij daarvoor dient :)
Sessies worden namelijk server-side (op de server) op geslagen, terwijl de cookies client-side (op de pc van de bezoeker) opgeslagen, dus ik denk niet dat die dan met elkaar gaan communiceren. Maar het zou kunnen ja :p
Door de nul blijft de cookie geldig totdat alle browser-vensters zijn afgesloten en dan vervalt de cookie.

Uhm ... in php.ini kun je wel instellen hoe lang een sessie maximaal kan duren. Als men na 10 minuten het scherm niet gesloten heeft, maar de sessie ook niet vernieuwd heeft (door bijv. het scherm te vernieuwen), daar kan de sessie dan van komen te vervallen. Deze vervaltijd hangt af van de tijd die in php.ini staat. Van de cookie daarentegen kun je heel simpel instellen dat hij na een uur moet vervallen, simpelweg die '0' vervangen door 'time()+3600' (zonder '' uiteraard :))
Okee. Ik kan dus php.ini niet veranderen. M.a.w. op deze manier kan ik dus niet kiezen voor sessie en tijd. Ik zal dus iets nieuws moeten verzinnen. Dan toch maar overgaan op een login met MySQL.

Dat klopt ongeveer wel ... jouw getal is ook 10 cijfers groot ... wil je de exacte seconden berekenen, dan moet je ff het exacte verschil tussen toen en nu uitrekenen ;)

Exacte verschil is nu: 1086856080, waarom uitrekenen? Met echo time() bespaar je jezelf een hoop rekenwerk :p!
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan