[PHP] setcookie() niet

Pagina: 1
Acties:

Onderwerpen


  • KO
  • Registratie: December 2001
  • Laatst online: 12-11-2023
Op een lokale pc (PHP 5 + IIS) run ik 2 scripts:

script 1:
PHP:
1
2
3
setcookie("working", "yes");
header('Location: test1.php');
exit;


script 2:
PHP:
1
2
echo  "Cookie  is:  ". $_COOKIE["working"] . '<br>';  
echo  "Cooke  is:  ". $working . '<br>';


De output op de lokale machine:
code:
1
2
Cookie is: yes
Cooke is: yes

De instellingen met phpinfo() zien er voor beide machines hetzelfde uit.
Wanneer ik deze code op een andere pc draait (PHP 5 + IIS) komt er niets uit. Ook het meegeven van een domein werkt niet. Zie ik wat gigantisch over het hoofd dat het op die andere machine niet werkt? |:(

Yesterday Is History. Today Is A Gift. Tomorrow Is Mystery


  • mithras
  • Registratie: Maart 2003
  • Niet online
Je gebruikt nu als syntax
PHP:
1
setcookie(name,value)
Maar wat gebeurt er als je niet een domain, maar gewoon een expiretime en path opgeeft, op deze manier:
PHP:
1
setcookie(name,value,expire,"/")
De functie met alle parameters ziet er zo uit
PHP:
1
setcookie(name,value,expire,path,domain,secure)
Dus als bovenstaande niet werkt kan je miscchien alles proberen mee te geven?

Verder lijkt $working niets te bevatten, dus misschien nog ergens $working=$_COOKIE["working"] plaatsen ;)

  • KO
  • Registratie: December 2001
  • Laatst online: 12-11-2023
$working werkt als je register globals aan zet, je gaat alles proberen op den duur. Ook het meegeven van (alle) parameters werkt niet.

PHP:
1
2
3
setcookie("working", "yes");
echo  "Cookie  is:  ". $_COOKIE["working"] . '<br>';  
exit;


Deze werkt weer wel, na een refresh van de browser. :? Het lijkt erop dat de cookie niet meegezonden wordt.

PHP:
1
header("Set-Cookie: cookiename=cookievalue; expires=18-Oct-2008 GMT; path=/; domain=.www.domain.com");

Werkt ook niet.
[edit]
Het werkt weer wel na een (extra) refresh met de browser. De 1e keer dus niet, na een refresh weer wel.

[ Voor 69% gewijzigd door KO op 16-09-2006 10:43 ]

Yesterday Is History. Today Is A Gift. Tomorrow Is Mystery


  • Mr. Bondt
  • Registratie: Februari 2005
  • Laatst online: 27-08 14:50
Ahum:
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);.

[ Voor 194% gewijzigd door Mr. Bondt op 16-09-2006 11:00 ]


  • KO
  • Registratie: December 2001
  • Laatst online: 12-11-2023
? volgens mij is dit "the next loading"

code:
1
header('Location: test1.php');

Yesterday Is History. Today Is A Gift. Tomorrow Is Mystery


  • JayVee
  • Registratie: Mei 2002
  • Laatst online: 31-08 10:22

JayVee

shibby++!

Nee, volgens mij niet, en daar ligt het probleem.
Als er vanuit a.html gelinkt wordt naar b.php, en die headert meteen door naar c.html, dan brengt de back button je terug naar a.html. (correct me if I'm wrong). Het is dus maar de vraag wat 'next loading' inhoudt...

Wat je zou kunnen proberen is een meta refresh zetten in b.php (jouw script1 dus). Dat is wel erg lelijk, maar het zou moeten werken.

[ Voor 7% gewijzigd door JayVee op 16-09-2006 11:18 ]

ASCII stupid question, get a stupid ANSI!


  • KO
  • Registratie: December 2001
  • Laatst online: 12-11-2023
JayVee schreef op zaterdag 16 september 2006 @ 11:18:
Nee, volgens mij niet, en daar ligt het probleem.
Als er vanuit a.html gelinkt wordt naar b.php, en die headert meteen door naar c.html, dan brengt de back button je terug naar a.html. (correct me if I'm wrong). Het is dus maar de vraag wat 'next loading' inhoudt...

Wat je zou kunnen proberen is een meta refresh zetten in b.php (jouw script1 dus). Dat is wel erg lelijk, maar het zou moeten werken.
b.php gaat niet door naar c (die is er niet). In a wordt een cookie gezet, dan gaan we door naar b. Dat is dan de "next loading". b laat echter niets zien (op een lokale pc wel overigens).

Yesterday Is History. Today Is A Gift. Tomorrow Is Mystery


Verwijderd

JayVee schreef op zaterdag 16 september 2006 @ 11:18:
Nee, volgens mij niet, en daar ligt het probleem.
Als er vanuit a.html gelinkt wordt naar b.php, en die headert meteen door naar c.html, dan brengt de back button je terug naar a.html. (correct me if I'm wrong). Het is dus maar de vraag wat 'next loading' inhoudt...
Waar het misgaat is dat je het over een back button hebt. Dit probleem speelt zich af op een heel ander niveau, namelijk het HTTP protocol. Het is de user agent die een 301 en een Location header terugkrijgt. Er hoort ook een Set-Cookie header bij te zitten. De HTTP client hoort alles te verwerken, en daarna te redirecten naar de URI in de Location header. Dit hoeft niet automatish te gaan, maar dat is over het algemeen wel zo handig. De tweede request zou een Cookie header mee moeten sturen als de HTTP client de cookie heeft geaccepteerd.

Het is zaak om uit te zoeken waar het fout gaat in de HTTP headers. Stuurt de server die Set-Cookie header niet mee? Stuurt de client de Cookie header niet terug?

Dit lijkt mij gewoon om foute implementatie van de server of de client, of een verkeerde configuratie.
Wat je zou kunnen proberen is een meta refresh zetten in b.php (jouw script1 dus). Dat is wel erg lelijk, maar het zou moeten werken.
Dit is uiteraard een workaround die eigenlijk niets anders doet dan een user agent die na een 301 + Location header automatisch een nieuwe request doet.

  • KO
  • Registratie: December 2001
  • Laatst online: 12-11-2023
Vanaf de server werkt deze wel na een refresh van de browser:
PHP:
1
2
3
4
setcookie("working", "yes");

echo  "Cookie  is:  ". $_COOKIE["working"] . '<br>';  
echo  "Cooke  is:  ". $working;

Yesterday Is History. Today Is A Gift. Tomorrow Is Mystery

Pagina: 1