Ik heb een probleem met sessies (en cookies) waar geen logisch antwoord op lijkt te zijn. Het gaat om een systeem dat tussentijds e.e.a. wegschrijft in de database en inlogged, zodat de juiste gebruiker zijn of haar foto's, profiel, etc. kan toevoegen.
Er gebeurd helemaal niets spannend. Er wordt een emailadres opgeslagen en een hash (als test) gebaseerd op md5(time()). Deze schrijft ik naar de database en in een sessie. Op de volgende pagina wordt er gecontroleerd of de data in de sessies en de database overeenkomen.
Het probleem: in 20% van de gevallen komt de sessie niet overeen. Terwijl ze écht dezelfde bron hebben en direct na elkaar worden geschreven en opgehaald.
Nog een probleem: Bij ongeveer 2% wordt helemaal geen sessie geschreven.
Via een iFrame moet het formulier ook geladen worden. Maar hier is het foutpercentage nog hoger.
Ik heb het volgende geprobeerd:
- Tijdzone op de server goed gezet (stond niet goed).
- SessionTime verhoogd (was vrij kort).
- Alle vars, sessies e.d. gerenamed.
- Backup met cookies gemaakt (zelfde resultaat).
- Overal foutafhandeling (waaruit blijkt dat sessies dus verkeerd zijn, of gewoon niet opgeslagen worden).
- Etc.
Wat ik nog kan doen, maar na 12 uur trial en error, vraag ik toch maar eerst om advies.
- Ik gebruik P3P voor IE (iframe). Wellicht dat P3P verwijderen iets kan schelen.
- Random string ipv time(). Maar dat lost niet alles op.
- MD5 uitschakelen. Maar dat lost niet alles op.
- Via Google kwam ik tegen dat je UTF-8 moet encoden voor het schrijven naar de DB, aangezien dit gebeurd vóór de HTML headers aangeroepen worden. Mij lijkt dit niet helpen aangezien md5 volgens mij geen speciale karakters bevat.
Suggesties zijn welkom:
Er gebeurd helemaal niets spannend. Er wordt een emailadres opgeslagen en een hash (als test) gebaseerd op md5(time()). Deze schrijft ik naar de database en in een sessie. Op de volgende pagina wordt er gecontroleerd of de data in de sessies en de database overeenkomen.
Het probleem: in 20% van de gevallen komt de sessie niet overeen. Terwijl ze écht dezelfde bron hebben en direct na elkaar worden geschreven en opgehaald.
Nog een probleem: Bij ongeveer 2% wordt helemaal geen sessie geschreven.
Via een iFrame moet het formulier ook geladen worden. Maar hier is het foutpercentage nog hoger.
Ik heb het volgende geprobeerd:
- Tijdzone op de server goed gezet (stond niet goed).
- SessionTime verhoogd (was vrij kort).
- Alle vars, sessies e.d. gerenamed.
- Backup met cookies gemaakt (zelfde resultaat).
- Overal foutafhandeling (waaruit blijkt dat sessies dus verkeerd zijn, of gewoon niet opgeslagen worden).
- Etc.
Wat ik nog kan doen, maar na 12 uur trial en error, vraag ik toch maar eerst om advies.
- Ik gebruik P3P voor IE (iframe). Wellicht dat P3P verwijderen iets kan schelen.
- Random string ipv time(). Maar dat lost niet alles op.
- MD5 uitschakelen. Maar dat lost niet alles op.
- Via Google kwam ik tegen dat je UTF-8 moet encoden voor het schrijven naar de DB, aangezien dit gebeurd vóór de HTML headers aangeroepen worden. Mij lijkt dit niet helpen aangezien md5 volgens mij geen speciale karakters bevat.
Suggesties zijn welkom:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| // Verwijder alle sessies $_SESSION = array(); session_destroy(); // Alle cookies verwijderen setcookie('email', '', time() - 3600); setcookie('hash', '', time() - 3600); session_start(); $hashcode = md5(time()); // Inloggen (zet cookies en sessies) $_SESSION["email"] = $emailadres; $_SESSION["hash"] = $hashcode; setcookie("email",$emailadres, time()+2440); setcookie("hash",$hashcode, time()+2440); // Hierna volgt een insert into, etc. waarbij alle data prima wordt opgeslagen. |