AMD Phenom II X6 1090T | 2x 4GB Kingston | Geforce GTX 560TI | Creative I-Trigue L3450
1
2
3
| <? setcookie("mid", "", time()-3600); ?> |
Zo misschien?
Hoi!
AMD Phenom II X6 1090T | 2x 4GB Kingston | Geforce GTX 560TI | Creative I-Trigue L3450
Ik heb het zelf niet getest, maar als ik dat zo lees zou je het Cookie moeten kunnen verwijderen door $mid te vervangen door FALSE.Because setting a cookie with a value of FALSE will try to delete the cookie, you should not use boolean values. Instead, use 0 for FALSE and 1 for TRUE.
“The best way to get the right answer on the Internet is not to ask a question, it's to post the wrong answer.”
QA Engineer walks into a bar. Orders a beer. Orders 0 beers. Orders 999999999 beers. Orders a lizard. Orders -1 beers.
AMD Phenom II X6 1090T | 2x 4GB Kingston | Geforce GTX 560TI | Creative I-Trigue L3450
AMD Phenom II X6 1090T | 2x 4GB Kingston | Geforce GTX 560TI | Creative I-Trigue L3450
1
| setcookie('username', '', 0, '/'); |
Nu je het zegt in alle andere voorbeelden wordt geen pad meegegeven. Normaliter mag dit niks uitmaken volgens mij en zou php een default moeten gebruiken.Sybr_E-N schreef op maandag 14 februari 2005 @ 20:39:
Voor het verwijderen van een cookie gebruik ik meestal (werkt bij mij ook in Firefox):
PHP:
1 setcookie('username', '', 0, '/');
Ik heb echter ook ooit eens een soortgelijk probleem gehad onder IE, geen pad opgegeven geen cookie gezet. Wel pad opgegeven wel cookie gezet. (De cookie werd wel gezet maar IE gaf hem niet terug)
Mannen komen van Mars Tweakers, vrouwen van Venus Bokt
Intentionally left blank
dat is toch niet verboden?crisp schreef op maandag 14 februari 2005 @ 23:38:
zet ook je error_reporting even op E_ALL; misschien stuur je al output voordat je je cookie zet?
alleen bij session_start enzo moet dat wel voor je output
[ Voor 1% gewijzigd door SWINX op 14-02-2005 23:49 . Reden: grrr.. weer eens een typo :( ]
Mannen komen van Mars Tweakers, vrouwen van Venus Bokt
cookies worden ook met de headers verstuurd hoor; een session_start genereert after all ook een cookie, en dat heeft dus dezelfde reden dat het voor elke output gedaan moet wordenSWINX schreef op maandag 14 februari 2005 @ 23:48:
[...]
dat is toch niet verboden?
alleen bij session_start enzo moet dat wel voor je output
uit de manual:
setcookie() defines a cookie to be sent along with the rest of the HTTP headers. Like other headers, cookies must be sent before any output from your script (this is a protocol restriction). This requires that you place calls to this function prior to any output, including and tags as well as any whitespace. If output exists prior to calling this function, setcookie() will fail and return FALSE. If setcookie() successfully runs, it will return TRUE. This does not indicate whether the user accepted the cookie.
[ Voor 66% gewijzigd door crisp op 14-02-2005 23:52 ]
Intentionally left blank
Dit herken je ook weer terug aan dat een cookie nog niet op dezelfde pagina kan worden opgevraagd.
Ik ben het dus niet helemaal met de PHP manual eens (of is dat TE eigenwijs
Mannen komen van Mars Tweakers, vrouwen van Venus Bokt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| <html> <body> <div style="display:none"> <?php // buffertje vullen :P echo str_repeat('tralalalala',1000); ?> </div> <?php setcookie('test', 'test', time()+3600); ?> je cookie: <script type="text/javascript">document.write(document.cookie);</script> </body> </html> |
geeft:
Warning: Cannot modify header information - headers already sent by (output started at f:\wwwroot\bla.php:7) in f:\wwwroot\bla.php on line 13 je cookie:
geen cookie dus, terwijl dit:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| <?php setcookie('test', 'test', time()+3600); ?> <html> <body> <div style="display:none"> <?php // buffertje vullen :P echo str_repeat('tralalalala',1000); ?> </div> je cookie: <script type="text/javascript">document.write(document.cookie);</script> </body> </html> |
geeft:
je cookie: test=test
likewise, dit:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| <html> <body> <div style="display:none"> <?php // buffertje vullen :P echo str_repeat('tralalalala',1000); ?> </div> <?php setcookie('test', 'test', time()-3600); ?> je cookie: <script type="text/javascript">document.write(document.cookie);</script> </body> </html> |
verwijderd je cookie dus niet(!) en geeft dus ook nog gewoon je cookie weer.
Verder zie je dus dat clientside je cookie wel degelijk meteen op te vragen is. Serverside kan je dit truuken door dit te doen:
1
2
| $_COOKIE['test'] = 'test'; setcookie('test', $_COOKIE['test'], time()+3600); |
dan kan je in de rest van je script al gelijk met $_COOKIE['test'] werken.
De reden dat ik eerst een hoop loos geblaat stuur is omdat sommige webservers intern vaak eerst bufferen voordat ze beginnen met output sturen. Soms is het dus mogelijk om na een aantal bytes output toch nog headers (en dus ook cookies) te sturen, maar ga daar maar beter niet van uit.
Intentionally left blank
Dat kan per definitie niet. Hoe weet PHP nou wat 'de volgende pagina' is?SWINX schreef op dinsdag 15 februari 2005 @ 00:02:
Het cookie zit volgens mij pas bij de headers van de volgende pagina.
Jij haalt twee dingen door elkaar: het versturen van een cookie van de server naar de client, en het vervolgens weer meegeven van datzelfde cookie door de client terug naar de server.Dit herken je ook weer terug aan dat een cookie nog niet op dezelfde pagina kan worden opgevraagd.
AMD Phenom II X6 1090T | 2x 4GB Kingston | Geforce GTX 560TI | Creative I-Trigue L3450
Ik gebruik Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8) Gecko/20051111 Firefox/1.5.
Ik zet mijn cookie door:
1
| setcookie('user_id',$user_id,time() + 14 * 3600,"/",COOKIE_DOMAIN); |
en wil 'm verwijderen door:
1
| setcookie('user_id', FALSE, time()-30000, COOKIE_DOMAIN); |
Doe ik dat, dan geeft LiveHTTPHeaders in Firefox keurig aan:
1
| Set-Cookie: user_id=deleted; expires=Sun, 05-Dec-04 01:05:01 GMT; path=www.url.tld |
Ga ik echter met de Add N Edit Cookies extension kijken of mijn koekje nu weggetrapt is, dan zie ik 'm daar nog keurig staan... met z'n oude waarde, oude expiration date en oude domein...
Ik heb de hierboven genoemde varianten volgens mij allemaal geprobeerd, maar geen van allen haalt mijn cookie weg.
Nogmaals het probleem van de TS dus; heeft iemand een idee waar dit aan ligt?
When I write my code, only God and I know what it means. One week later, only God knows.
Hell yes it's a Cuban Cigar, but I'm not supporting their economy, I'm burning their fields.
1
2
3
| <? setcookie('user_id', false,time()-100000,"/",COOKIE_DOMAIN); ?> |
Volgens mij moet je bij het verwijderen van een cookie namelijk precies dezelfde -of in ieder geval 't zelfde aantal - parameters meegeven alleen dan ipv een cookie value false.
Weet je ook zeker dat time()-30000 of time()-100000 or whatever ook daadwerkelijk een tijd is die in 't verleden ligt? time()-iets is op server wel in 't verleden, maar op de workstation waar de cookie geschreven wordt, misschien niet.
[ Voor 66% gewijzigd door TheDane op 05-12-2005 02:21 ]
Verwijderd
beste kan je wel outputbuffering gebruiken: ob_start(); ob_end_flush(); omdat een cookie voor de rest van de output verzonden moet worden
Verwijderd
inloggen:
setcookie("cookienaam", "cookiewaarde", time() + $instellingen[cookietijd], "/", "", "0");
uitloggen:
setcookie ("cookienaam", "cookiewaarde", time() - 3600, "/", "", "0");
cookienaam moet hetzelfde zijn, de waarde hoeft dat niet te zijn niet, bij het uitloggen maak ik er altijd een niet bestaande waarde van, waardoor een cookie ook al in feite geen waarde meer heeft
[ Voor 85% gewijzigd door Verwijderd op 05-12-2005 03:40 ]
Je wilt echt wel een zinnig domein+pad opgeven bij je cookie, een beetje browser blokkeert anders je cookie...Verwijderd schreef op maandag 05 december 2005 @ 03:30:
setcookie("cookienaam", "cookiewaarde", time() + $instellingen[cookietijd], "/", "", "0");
setcookie ("cookienaam", "cookiewaarde", time() - 3600, "/", "", "0");
Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info
Arggg wat stom! Daar heb ik dan gisteren 3 uur aan besteed.TheDane schreef op maandag 05 december 2005 @ 02:15:
Dit al geprobeerd?
Volgens mij moet je bij het verwijderen van een cookie namelijk precies dezelfde -of in ieder geval 't zelfde aantal - parameters meegeven alleen dan ipv een cookie value false.

Ik dacht eerst: wat een onzinreactie plaats je nou, want ik héb steeds met dezelfde parameters geprobeerd de cookie te verwijderen.
Blijkt dat ik die éne stomme parameter "/" voor het path steeds wel bij het maken van de cookie gebruik, maar niet bij het verwijderen. En daar moet ik dan achter komen door in dit topic, naar aanleiding van jouw reactie, mijn twee stukjes code nog eens te vergelijken.

Bleek dus basic debugging te zijn in plaats van een heavy browserbug... maar toch bedankt.
When I write my code, only God and I know what it means. One week later, only God knows.
Hell yes it's a Cuban Cigar, but I'm not supporting their economy, I'm burning their fields.
Verwijderd
het pad is al opgegeven en het domein wordt automatisch gezet alleen als je subdomeinen gebruikt haal je het www gebeuren er af zodat die ook voor alle subdomeinen geldig isJe wilt echt wel een zinnig domein+pad opgeven bij je cookie, een beetje browser blokkeert anders je cookie...