06. juni 2004 - 17:40Der er
3 kommentarer og 1 løsning
Problemer med session via login
Hey Eksperter
Vores projektgruppe har nogle problemer omkring SESSION via login. Vi har en tabel kaldet "onlineliste" hvor vi gemmer Brugerens ID i via SESSIONS. Vi har nu det problem at når folk ikke bruger "logud" knappen, men bare lukker browser winduet i stedet for, så bliver deres BrugerID ikke slette fra onlineliste tabellen når deres SESSION lukkes. Derfor leder vi efter en funktion der kan slette deres BrugerID fra onlineliste tabellen, når den SESSION der tilhører der BrugerID lukkes, også selvom man bare lukker browser winduet, og ikke bruger vores logud funktion.
Håber der er en venlig sjæl der enten kan henldes os til et eksempel på dette eller kan vise et styk kode der kan hjælper os på vej, vi er virkelig kørt fast her...
Du kan ikke se hvornår brugeren lukker fra serveren. Det eneste du kan gøre er enten at acceptere at der går st stykke tid før "php opdager" at brugeren ikke er aktiv mere og derved fjerne denne. Eller lave et lille bid javascript der bliver kaldt når browseren lukkes. Denne kan så kalde en url som fungere som "logud" knap.
Jeg har ikke forstand på javascript, og det er egenligt også off-topic her - men forsøg evt i js gruppen.
Jeg lavede engang selv en online-liste. I tabellen i databasen havde jeg også to timestamp felter. Et der fortæller hvornår brugeren er logget ind (feltet: online_time_first), og et der fortæller hvornår sessionen sidst er opdateret (feltet: online_time_last). Ved hvert sideskift/bevægelse kørte jeg følgende funktion:
<?php function updateOnlineList() { $userid = $_SESSION["userid"]; $timeOut = 10; $timeNow = time(); $removeTime = $timeNow - ($timeOut*60); $res = mysql_query("SELECT user_id FROM onlineliste WHERE user_id = '$userid'"); if (mysql_num_rows($res) < 1) { mysql_query("INSERT INTO onlineliste (user_id,online_time_first,online_time_last) VALUES ('$userid','$timeNow','$timeNow')"); } else { mysql_query("UPDATE onlineliste SET online_time_last = '$timeNow' WHERE user_id = '$userid'"); } mysql_query("DELETE FROM onlineliste WHERE online_time_last < '$removeTime'"); } ?>
Den har 3 funktioner:
1. Hvis brugeren ikke eksisterer i online-listen, tilføjes personen til denne. 2. Hvis brugeren eksisterer i online-listen, opdateres feltet "online_time_last" med den aktuelle timestamp. 3. Sletter de brugere der ikke har bevæget sig de sidste 10 minutter.
Hey Whatever vi prøver lige funktionen her om en halv time sidder lige midt i en anden funktion, Skal nok huske at give dig Point hvis det virker ..
Og super tak for forslaget..
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.