Ik probeer mensen ingelogd te houden dmv een cookie op de site, maar dat lukt me nog niet. Het probleem is dat de laatst actieve tijd van de persoon eerder wordt upgedate dan de cookie-controle, waardoor de cookies niet meer kloppen denk ik.
Ik heb al zitten denken, maar ik kom er niet uit hoe ik de functie goed krijg zodat de tijden kloppen. Mijn cookie wordt nu ook steeds verwijdert omdat de tijd niet klopt. Ik snap er niets meer van, misschien dat iemand mij kan helpen?
De functie staat op http://www.plaatscode.be/2903/.
7 antwoorden
Gesponsorde links
Thomas - 19/10/2006 11:29 (laatste wijziging 19/10/2006 11:31)
Moderator
Na één update werkt je her-login niet meer omdat je code wel update in je cookie, maar niet in je database.
Verder kunnen time() (PHP) en NOW() (MySQL) verschillen - gebruik $time ook voor je UPDATE-query.
Ik heb nu de tijd overal aangepast, maar het werkt nog niet. Mijn cookie wordt weer verwijderd zodra ik naar een andere pagina ga. Het zou zo toch moten werken. Als er een cookie is gezet, wordt de info vergeleken met die van de database. Klopt de info, ververs de cookies en zet de databasetijd goed. Kloppen de cookies niet, verwijder ze.
Zijn er géén cookies gezet, maar de sessie bestaat wel (de persoon wil dus niet ingelogd blijven), update dan alleen de tijd in de database.
Op zich zou dit zo toch moeten werken? (Er moet straks alleen nog een stukje bij in de functie die kijkt of iemand online is, zoniet, dan wordt diegene gelijk in de tabel 'online' gezet).
Mijn code nu staat op http://www.plaatscode.be/2904/
Thomas - 19/10/2006 12:12 (laatste wijziging 19/10/2006 12:12)
Moderator
Is deze functie bedoeld om mensen te her-inloggen als de sessie is verlopen of is dit een functie die elke pagina-access wordt aangeroepen om te kijken of je met een geldige gebruiker te maken hebt (of beide)?
Staan deze "andere pagina's" toevallig in een andere folder? Want je cookies zijn alleen geldig in de folder (en het domein) waarin ze aangemaakt zijn...
Ik raad je aan om hier en daar eens wat info te gaan dumpen met print_r - en wat die()-statements aan te brengen voordat er zaken gewijzigd worden om zo uit te vinden wat er precies gebeurt.
Iemand logt in, en wil ingelogd blijven, er wordt dus een cookie gezet. Dan moet de functie het volgende doen:
Bij het binnenkomen op index.php, moet worden gecontroleerd of een cookie is gezet. Dan wordt gekeken of de cookie 'geldig' is, en wordt iemand op basis daarvan eventueel ingelogd.
Door mijn cookiestructuur moet de tijd in de cookie en de database gelijk zijn, dus moet die steeds worden upgedate.
Als er geen cookie is gezet, controleer de sessie, of die klopt. Dit stuk klopt ook nog niet helemaal, want er moet nog een cronjob komen, die je na 15min. inactief te zijn uit de tabel Online haalt zodat je uitgelogd wordt. Ik print de sessie- en de cookie-array al. Die die()-statements zal ik dalijk even in gaan voegen.
Zou je het niet omdraaien?
Als een sessie niet is gevuld, dan kijk je of er cookies geset zijn - als dit het geval is herstart je de sessie mits de gegevens kloppen met je database.
Als een sessie al is gevuld doe je niets.
Daar dacht ik net ook al aan, ik ben nu bezig met omdraaien. Je hoort zo wel of het gelukt is (zoja, met oplossing).
Nee dus, het is nog niet gelukt
Er gaat iets mis met het cookiezetten, denk ik, of de cookies worden onmiddelijk verwijderd. Maar daar ik krijg geeneen van mijn foutmeldingen te zien .
Op http://www.plaatscode.be/2908/ vind je de functie en het stukje waarmee je ingelogd wordt.
$time zet ik bovenaan index.php (waarop ik alles include) zodat ik overal dezelfde time(); waarde heb.
Aan dat script heb ik ook niet zoveel, zo'n zelfde idee heb ik nu gemaakt, het probleem zit nu echt bij de cookies volgens mij.
Ik denk dat ik weet hoe het komt, ik krijg de error dat $time; niet gedefinieerd is in functions.inc.php, terwijl die geïnclude wordt op index.php en $time; bovenaan index.php wordt gedefinieerd. Waarschijnlijk worden de pagina's dus geïnclude, voordat $time; wordt gezet (tenminste, dat is het meest logische, want een waarde kan in een geïnclude-pagina op worden gevraagd). Hoe ga ik dit oplossen?
Ik include de eerste 3 pagina's trouwens ook niet, die require ik (dat zijn de functies, de database connectie en de templatepower class).