login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Cookie en time(); verschil

Offline Dark_Paul - 28/10/2006 20:52 (laatste wijziging 06/11/2006 09:55)
Avatar van Dark_PaulPHP ver gevorderde Hej,

Ik loop tegen een beetje een vreemd probleem aan, namelijk dat de tijd in de gezette cookie en in de database en verschil heeft van 3 seconden. Ik zet de tijd in de cookie als UNIX-timestamp, de database is een DATETIME. Ik zet ze beide met time(); omdat FangorN mij een keer vertelde dat time(); en NOW() nog een verschillende tijd kunnen geven.
Het probleem: ik log in, alles klopt. Ik sluit af (sessies weg), ik kom terug, ik wordt keurig ingelogd. Zodra ik de pagina refresh, komt er een tijdsverschil van 3 seconden tussen de gezette cookie en de database (database is 3sec. later). Ik kan maar niet uitvinden waarom dat gebeurt.
De functie vind je op http://www.plaatscode.be/2980/
Ik heb mijn else even tussen */ gezet, zodat de cookies niet steeds verwijderd worden. Dat is voor mij nu gemakkelijker om de fout te zoeken.

8 antwoorden

Gesponsorde links
Offline Martijn1989 - 29/10/2006 01:47
Avatar van Martijn1989 PHP ver gevorderde En als je nu eens gewoon de timestamp in de database zet ? Als daar ook een verschil van 3 seconden zit, is er iets mis met de Mysql zou ik zeggen?
Offline Dark_Paul - 05/11/2006 09:57 (laatste wijziging 06/11/2006 09:57)
Avatar van Dark_Paul PHP ver gevorderde Beetje (erg) late reactie, maar dat werkt ook niet. Ik heb een nieuw veld aangemaakt, genaamd timestamp en daar zet ik de UNIX timestamp in, maar dat werkt ook niet. Er ontstaat dan nog steeds een verschil.

Het gaat fout bij het zetten van de cookie. Als ik steeds refresh, eindigt time(); bijvoorbeeld op 24. Dan refresesh ik, dan komt time(); bijv op 34 te staan, maar dan wordt de cookie op 24 gezet. Refresh ik dan weer, dan komt de cookie op 34 enzovoorts. De cookie krijgt dus steeds de vorige waarde van $time;. Ik kan maar niet uitvinden waardoor dat komt. Hetzelfde geldt voor de database, de database klopt, de cookie heeft steeds de vorige tijd van de database.
Offline Chupskie - 06/11/2006 10:20
Avatar van Chupskie MySQL beginner volgens mij heb je dan de time() staan na de cookie en niet daarvoor. Al je de time() ervoor zet, moet volgens mij dit probleem opgelost zijn.

Succes
-Chupskie
Offline Addow - 06/11/2006 11:00
Avatar van Addow Gouden medaille

PHP beginner
En als je time() nu eens in een variabele steekt. En vervolgens die variabele zowel aan de cookie als de query meegeeft, dan weet je toch 100% zeker dat de waarde identiek is?

Offline Thomas - 06/11/2006 12:23 (laatste wijziging 06/11/2006 12:23)
Avatar van Thomas Moderator Dat gebeurt (zie script op plaatscode.be).

Ik zie zo gauw niets vreemds, alleen zul je uit oogpunt van veiligheid / correct functioneren op de volgende zaken moeten letten:

- zorg dat mensen niets in je query kunnen injecteren; controleer dus de inhoud van je cookies op enigerlei wijze (is_numeric()?)
- zorg dat je cookies op heel je domein geldig zijn door een 4e parameter ("/") toe te voegen - je loginscript zal op dit moment niet meer werken op het moment dat je in een andere scriptfolder zit... Misschien verklaart dat je probleem? Hoeveel cookies zijn er geset? Dit kun je makkelijk bekijken in FF - type in het cookie-onderdeel je domeinnaam in en je ziet direct hoeveel cookies er daar geset zijn
- het IP-nummer is juist iets wat je NIET in een cookie opslaat!!! Maar alleen in je database bijhoudt...

Ik denk dat je eea alsnog moet uitpluizen / beredeneren.
Offline Dark_Paul - 06/11/2006 13:50
Avatar van Dark_Paul PHP ver gevorderde OK, IP cookie gaat er dus uit (die had ik oorspronkelijk ook niet). Die 4e parameter zou ook neits uit moeten maken, want alles staat in dezelfde map. Het probleem is ook niet dat de cookies niet beschikbaar zijn, maar de tijd die gezet wordt in de cookie komt gewoon niet overeen met de tijd die ik in de variabele heb staan..
Ik heb er nu ook een aantal ereg's en eregi's overheen gegooid (kreeg op PHPfreakz hetzelfde te horen, dat het niet veilig was).
Offline Thomas - 06/11/2006 13:54
Avatar van Thomas Moderator Wat je probeert te bereiken, is nagenoeg gelijk aan mijn loginscript. Kijk daar eens naar, en zoek naar verschillen die eventueel het rare gedrag kunnen verklaren?

Ik weet dat ik zelf ook lang bezig ben geweest om alles goed te laten werken .
Offline Dark_Paul - 06/11/2006 16:36 (laatste wijziging 06/11/2006 17:39)
Avatar van Dark_Paul PHP ver gevorderde Dat script wat ik van jou gekregen heb, heb ik in een ander topic ook al van je gekregen. Echter werkt dit verder wel, alleen is het dat verschil in tijd dat ik niet kan verklaren. Ik heb 't vandaag aan mijn leraar informatica laten zien, en die kan er ook geen wijs uit (omdat ik steeds werk met eenzelfde variabele). Ik ga de functie sowieso even aanpassen en wat veiliger maken etc (op 't moment heb ik ook het probleem dat de cookies onmiddelijk worden verwijderd). Daarna zal ik je script nog eens goed doornemen.

Okej FangorN, bedankt voor de hulp. Ik heb mijn functie geheel opnieuw geschreven en heb daarbij de functie grotendeels gebaseerd op de cookieverwerking van het script dat jij hebt geschreven.
De nieuwe functie staat op http://www.plaatscode.be/3053/
Ik heb mijn functie numeric(); er maar bijgezet, anders kunnen mensen in de war raken met is_numeric();. Is het misschien ook een idee om het userid te versleutelen? Dat een userid van bijvoorbeeld 1503 eruit komt te zien als xq0b ofzo? Of is dat gewoon nutteloos (ik probeer die cookie-login zo veilig mogelijk te maken).
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.184s