webForumDet fria alternativet

Automatisk utloggning av användare

PHP

5 svar · 1 547 visningar · startad av s7eam

Medlem sedan mars 20066 inlägg
Frågan#1

Hej!

Jag brottas med sessions och inaktivitets tid för inloggade användare på en sida jag håller på att skapa.

Det är så att jag har gjort en typ utav forum där man kan lista online dvs. inloggade användare. Jag har skapat aktivitet funktion som fungerar som den skall och har man varit innaktiv i ett antal bestämda minuter uppdateras databasen, sessionen bryts och man loggas ut. Det är fine.

MEN, när man stänger av sin webbläsare utan att klicka på logga ut så bryter man sessionen såklart fast i databasen är men fortfarande flaggad som online. Man blir alltså online sålänge man inte loggar in igen och klickar på att loggar ut.

Exempelvis på Lunarstorm, när man stänger ned webbläsaren efter 10 el. 20 syns man inte som online. Hur löser man det problemet?

Jag har tillfälligt skapat en funktion som gör att när en annan användare besöker en profil så mäts ju inaktiviteten hos den besökta profilen och flaggas som offline i databasen om användaren har varit inaktiv för länge. Men det är ingen bra lösning i längden dessutom om en profil som aldrig blir besökt kommer alltid att förbli online.

Hjälp välkomnas...

Medlem sedan mars 200533 inlägg
#2

Antingen skriver du en funktion typ update_whos_online() som du slänger in i varje sida som tar bort online statusen på folk.

Eller så får du skriva en egen sessions hanterare som klämmer in en update av användarens online status när sessionens garbage collection kickar in.

Eller schedulerar du ett script via cron jobs eller windows scheudler som kickar igång var 20 min och uppdaterar alla som ska uppdaters.

Jag skulle förmodligen köra alternativ 1.

Medlem sedan mars 20066 inlägg
#3

Jag tycker alternativ låter mest sund.

Om jag väljer alternativ 1 och säg att du har 300 online. Funktionen skulle jobba en hel del och databas förfrågning skulle ju ske i onödan så ofta. Nä alternativ 1 skippar jag men cron jobs är intressantare.

Hur exekverar man php kod via cron jobs?

Medlem sedan nov. 2002302 inlägg
#4

Ett annat alternativ är att sätta in tiden som sessionen är giltig i databasen och bara hämta de användare som har giltig tid. Då krävs det visserligen att man uppdaterar databasen varje gång en användare gör någonting och alltså förlänger tiden som är giltig.

Medlem sedan maj 20071 061 inlägg
#5

(En gammal tråd, men för mig är den aktuell!) Sitter med samma problem och behöver hjälp.

Till min fördel har jag att användarna har "vänner", så "vännerna" kan uppdatera varandra. Altså behöver jag inte uppdatera 300 användare på ett bräde.

Jag har 2 fält:
online
latest_active_online_time

Tanken är att användare som varit inaktiva 10 min ska sättas som "icke online".

Hur kollar jag på ett smidigt sätt denna tiden runt midnatt ex.då kl. är 00:07. Måste jag dra med datum och allt i min koll eller finns det en smidigare lösning ?

Medlem sedan mars 2005265 inlägg
#6

Cron Jobs fråga. Jag är inget programmerare, men har en community som jag nu flyttat från en server (Debian) till ett webhotell. Webhotellet tillåter cron jobs men har en GUI funktion för detta. (se bild) Jag vet hur jag fixade cron jobs UNIX style, men ser inte hur jag ska göra i GUI panelen?

Den gamla koden från servern ser ut så här:

<?php
include("/server/www/sites/domain.com/includes/dbopen.php");

mysql_query("DELETE FROM tblSessions WHERE ses_updated<(UNIX_TIMESTAMP()-7200)") or Die ("Fel #1: " . mysql_error());

mysql_close($Conn);
?>

(Ändrat lite i sökvägen)

Kan någon hjälpa mig att förstå hur jag ska lägga in samma kod i denna?

dump.jpg
266 ms totalt · 4 externa anrop · v20260731065814-full.2f471f9e
126 ms — deklarationer (db)
0 ms — hämta statistik (cache)
136 ms — hämta tråd, inlägg och bilagor (db)
125 ms — ändringar (db)