Avatar billede cschmalz Nybegynder
07. januar 2007 - 14:03 Der er 22 kommentarer og
1 løsning

Log ud automatisk

Hej eksperter!!!!!!!
Jeg har mit community system, men har problemer med at logge folk af automatisk efter x min...
Det er den eneste mulighed for at logge folk af, da jeg ikke tror at man kan logge dem af når de lukker browser-vinduet... Eller ta'r jeg fejl??

Men det skal ihvertfald være sådan at folk ikke er online hele tiden hvis de ikke trykker "Logud".

Jeg har noget kode i evt. kan bygge på (ikke meget, da det jeg har ikke fungerer):

mysql_query("UPDATE login SET login_status2 = 'Offline' WHERE login_username = '$_SESSION[login_username]'") or die(mysql_error());
}

Håber i forstår hvad jeg mener og at i kan hjælpe. ;)

Mvh CschmalZ
Avatar billede zynzz Praktikant
07. januar 2007 - 14:12 #1
Hvis det var mig ville jeg gemme en tid når de blev logget ind og tjekke den hver gang siden blev opdateret

// sætter alle der ikke har opdateret i 40 sek til offline...
mysql_query("UPDATE login SET status2 = 'offline', tjektid = '0' where 'tjektid < ".$tid." - 40'");
Avatar billede cschmalz Nybegynder
07. januar 2007 - 14:17 #2
Men altså når brugeren så logger på... - eksempel:

<?
if($logind = "true"){
mysql_query("UPDATE login SET status2 = 'online', tjektid = '0' where login_username = '$_SESSION[login_username]'");
}
?>

Hvilken tjektid? time();?? Eller hvad...

Det samme gælder $tid er det time();??

Mvh CschmalZ
Avatar billede zynzz Praktikant
07. januar 2007 - 14:18 #3
Ja gem det format som time()
Avatar billede cschmalz Nybegynder
07. januar 2007 - 14:34 #4
Prøver...
Avatar billede cschmalz Nybegynder
07. januar 2007 - 14:50 #5
Det virker ikke...

Når man har klikket logind kommer dette (timeout er i stedet for tjektid):
mysql_query("UPDATE login SET login_status2 = 'Online', login_ip = '$_SERVER[REMOTE_ADDR]', timeout='0' WHERE login_username = '$s_login_username'") or die(mysql_error());

Og øverst på min side har jeg:
$a = mysql_query("SELECT * FROM login WHERE login_username = '$_SESSION[login_username]' AND login_password = '$_SESSION[login_password]' LIMIT 1") or die(mysql_error());
while($r = mysql_fetch_array($a)) {
$tid = time();
if($r[timeout] < ($tid-40)){
mysql_query("UPDATE login SET login_status2 = 'Offline', timeout='0' WHERE login_username = '$_SESSION[s_login_username]'") or die(mysql_error());
}
}
Avatar billede zynzz Praktikant
07. januar 2007 - 15:13 #6
Sådan kan du ikke gøre, du er nød til at tjekke alle brugere, som fx. er online...

Nu tjekker du kun en, og hvis han ikke selv opdatere bliver han ikke logget af...
Avatar billede cschmalz Nybegynder
07. januar 2007 - 15:59 #7
Hvordan skal koden så se ud??

Ellers har jeg PRØVET at lave noget selv ;):

Denne kode logger brugeren af efter 1 min.:

$a = mysql_query("SELECT * FROM login WHERE login_username = '$_SESSION[login_username]' AND login_password = '$_SESSION[login_password]' LIMIT 1") or die(mysql_error());
while($r = mysql_fetch_array($a)) {
if($r[timeout]+1 < date("Hi")){
mysql_query("UPDATE login SET login_status2 = 'Offline', timeout='0' WHERE login_username = '$_SESSION[login_username]'") or die(mysql_error());
session_unset();
session_destroy();
}
}


Denne kode sætter en som online og skriver tiden TimerMin. når man logger ind:

$tid = date("Hi");
mysql_query("UPDATE login SET login_status2 = 'Online', login_ip = '$_SERVER[REMOTE_ADDR]', timeout='$tid' WHERE login_username = '$_SESSION[login_username]'") or die(mysql_error());


Det hele virker, altså hvis man er på siden... Hvis man lukker vinduet og går tilbage til siden er man stadig online...
Hjælp?
Avatar billede zynzz Praktikant
07. januar 2007 - 16:04 #8
$tid = time();

//fortæller den skal opdatere brugere som ikke har haft opdatere feltet "tjektid" i 50 sekunder - hvis ikke, så laver den "status" til offline og reseter "tjektid".
mysql_query("UPDATE login SET status = 'offline', tjektid = '0' where tjektid < (".$tid." - 50)");

//opdatere bruger data
mysql_query("UPDATE login SET tjektid = '".$tid."' WHERE `brugernavn` = '".$_SESSION['login_username']."'");
Avatar billede woowii Nybegynder
07. januar 2007 - 16:04 #9
Jeg har selv lavet det sådan at hvergang brugeren opdaterer en side/kigger på en ny gemmes den nye tid i databasen - udfra det siger jeg at alle der har kigget på en ny side i de seneste 5 minutter er online, tror det er standard måden at gøre det på. At sætte noget til offline er spild, som jeg ser det, bare tjek tiden.
Avatar billede zynzz Praktikant
07. januar 2007 - 16:05 #10
mysql_query("UPDATE login SET tjektid = '".$tid."' WHERE login_username = '".$_SESSION['login_username']."'");
Avatar billede cschmalz Nybegynder
07. januar 2007 - 16:09 #11
men du siger:
set status til offline hvor tjektid er mindre end tid-50...
Så sætter den da offline ved alle bruger når man ikke siger WHERE logind_username = osv...?
Avatar billede cschmalz Nybegynder
07. januar 2007 - 16:13 #12
Nu prøver jeg som du siger, men hvordan får jeg session_unset();
session_destroy();
Til at fungere samtidig med mysql_query("UPDATE login SET status = 'offline', tjektid = '0' where tjektid < (".$tid." - 50)");
??
Avatar billede zynzz Praktikant
07. januar 2007 - 16:14 #13
Nej den siger alle de brugere der ikke har opdateret i 50 sek bliver sat til offline...
Avatar billede cschmalz Nybegynder
07. januar 2007 - 16:17 #14
k...
mysql_query("UPDATE login SET tjektid = '".$tid."' WHERE `brugernavn` = '".$_SESSION['login_username']."'");

Den skal i toppen af alle bruger-sider??
Avatar billede zynzz Praktikant
07. januar 2007 - 16:22 #15
Har du ikke en fil som går igen på alle sider ?
Avatar billede cschmalz Nybegynder
07. januar 2007 - 16:26 #16
næ... men det kan jeg da lave og include den...

Jeg har sat det op... men den er ikke sat som offline...
Skal måske lige sige at jeg har loginsystemet i en mappe og siderne i mappen er included på siden...
Indexen i loginmappen det er der jeg ligger alle de koder du har skrevet
Avatar billede zynzz Praktikant
07. januar 2007 - 16:27 #17
Ja, hvis du kørere alle filer gennem den er det fint nok..
Avatar billede cschmalz Nybegynder
07. januar 2007 - 16:28 #18
mysql_query("UPDATE login SET login_status2 = 'Offline', timeout = '0' WHERE timeout < (".$tid." - 50)");

skal pilen (<) laves om til >??
for alle de andre brugere i systemet har deres timeout i 0
Avatar billede zynzz Praktikant
07. januar 2007 - 16:29 #19
Nej den skal stå som der
Avatar billede cschmalz Nybegynder
07. januar 2007 - 16:58 #20
YAAAAAAAAAAAAAAAAA det virker!!!!!!!
Hvis jeg så vil have at tiden skal være 2 min. skriver jeg så bare 120 istedet for 50?

Bare skriv det som et svar så får du point!
Igen TAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK !!!! ;D
Giver også noget karma :P
Avatar billede zynzz Praktikant
07. januar 2007 - 18:01 #21
svar... :)

ja 120 = 2 min :)
Avatar billede cschmalz Nybegynder
07. januar 2007 - 18:02 #22
Du får point :) Tak igen
Avatar billede zynzz Praktikant
07. januar 2007 - 18:04 #23
Det var så lidt... :)

Hovedsagen er at det virker... :)
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester