Avatar billede sonic_86 Nybegynder
15. april 2003 - 00:34 Der er 14 kommentarer og
2 løsninger

Person skal havde trykket logout! før man kan forlade siden?

Hej
Jeg er i gang med at lave et bruger system hvor den, viser hvem der er online men hvis man bare lukker exploreren ned så skriver den stadig at man er online!
Kan man ikke lave en smart kode så man skal være logget ud før man kan lukke exploreren?
Jeg har også tænkt på at man kunne lave et popup når exploreren bliver lukket ned, med filen logout.php men det dur jo ikke hvis personen har en popup killer på computerne, nogle der er idere til hvordan man kan lave det?

Skriv hvis i skal bruge noget af min kode, til at se hvordan jeg har lavet det.
Avatar billede the_wanderer Nybegynder
15. april 2003 - 00:35 #1
det tror jeg sku ikke... i så fald kan jeg ikke så hvordan nettop det script skulle ha' noget med php at gøre..
Avatar billede ahv Nybegynder
15. april 2003 - 00:39 #2
Du kan lave et sidst aktivt felt - når en bruger så træder ind på siden / siderne kan du tjekke efter felter der er mere end f.eks. 10 min gamle, hvis de er det skal de så slettes.

Sig til hvis du ikke fortsåtr hvad jeg menere - Jeg har et kode eksempel hvis det er.
Avatar billede sonic_86 Nybegynder
15. april 2003 - 00:46 #3
ahv:
Er ikke helt med, vil godt se koden så kan det være jeg forstå det.
Avatar billede tipsen Nybegynder
15. april 2003 - 00:47 #4
sonic: Hehe - det var lige præcis det problem jeg omtalte i dit tidligere spørgsmål - der findes ikke nogen rigtig pæn løsning på det...

Der vil sikkert også komme forslag om at bruge onunload:

<BODY OnUnload="bye()">

hvor bye() så er et javascript som launcher et nyt vindue, som kalder et php-script der logger ud - det fungerer bare ikke, hvis javascript er slået fra...
Avatar billede sonic_86 Nybegynder
15. april 2003 - 00:55 #5
tipsen: ved godt det ikke er helt sikkert men hvordan gøres det?

<BODY OnUnload="bye('logout.php')"> ?
Avatar billede ahv Nybegynder
15. april 2003 - 00:59 #6
løsningen med et popup vindue sunes jeg ikke så godt om med mindre din side er i frames, men eller kan den laves med:

onunload="self.window.open('logud.php','title','height=10,width=10,resizable=no,status=no,toolbar=no,menubar=no,location=no')"
Avatar billede ahv Nybegynder
15. april 2003 - 01:01 #7
Men mit eksempel:

<?php
$connection = mysql_pconnect("host", "user", "pass");
mysql_select_db("database");

$ip = getenv(REMOTE_ADDR);

$tid = date("Y-m-d H:i:s", (time()-600));
$delete = "DELETE FROM online WHERE tid < '$tid'";
mysql_query($delete);

$tjek = mysql_query("SELECT * FROM online where ip='$ip'");
if(mysql_num_rows($tjek) == 0) {

$ind = "INSERT INTO online (tid, ip) VALUES (now(),'$ip')";
mysql_query($ind);

}}else{
$update = "update online set tid=now() where ip='$ip'";
mysql_query($update);
}
?>

Dette indsættes så blot i toppen af hver side, og du kan nu tjekke om folk er online ved at se i denne tabel - evt. tilføje et id i denne tabel i databasen istedet for at tjekke dem med ip.
Avatar billede sonic_86 Nybegynder
15. april 2003 - 01:03 #8
Det er jo bare ikke så smart hvis personen har javascript slået fra.
Avatar billede grunken Nybegynder
15. april 2003 - 01:03 #9
<body OnUnload="self.window.open('logout.php','LOGUD','left=2000,top=2000,height=10,width=10');">

Og jeg ved godt det ikke virker hvis folk har slået Java fra, men den her burde slippe uden om de fleste popupkillere!

-grunken
Avatar billede grunken Nybegynder
15. april 2003 - 01:04 #10
LOL hvor er jeg sløv !

ahv's ide er IK så fjollet :)
Avatar billede sonic_86 Nybegynder
15. april 2003 - 01:05 #11
Lige nu se min login-ok.php sådan ud:
mysql_query("UPDATE brugere SET online = 1 WHERE nick = '$post_nick'") or die('Fejl: '.mysql_error());

Og logout.php
mysql_query("UPDATE brugere SET online = 0 WHERE nick = '$nick'") or die ("Fejl X: ".mysql_error());
Avatar billede ahv Nybegynder
15. april 2003 - 01:10 #12
Til mit forslag ville en helt ny tabel vel passe bedst - Det eneste du så skal have i denne tabel er et idfelt og tiden idfeltet skal så bare være lig med idfeltet i tabellen hvor du har brugerens login informationer mv.

Så altså når man logger ind så skal man komme ind i tabellen online og har man ikke været aktiv i 10 min bliver man slettet der fra igen.
Avatar billede ahv Nybegynder
15. april 2003 - 01:11 #13
Der var vist sneget sig en } for meget ind :

<?php
$connection = mysql_pconnect("host", "user", "pass");
mysql_select_db("database");

$ip = getenv(REMOTE_ADDR);

$tid = date("Y-m-d H:i:s", (time()-600));
$delete = "DELETE FROM online WHERE tid < '$tid'";
mysql_query($delete);

$tjek = mysql_query("SELECT * FROM online where ip='$ip'");
if(mysql_num_rows($tjek) == 0) {

$ind = "INSERT INTO online (tid, ip) VALUES (now(),'$ip')";
mysql_query($ind);

}else{
$update = "update online set tid=now() where ip='$ip'";
mysql_query($update);
}
?>
Avatar billede sonic_86 Nybegynder
15. april 2003 - 01:13 #14
Altså så skal jeg ikke gemme ip'en? (Det ville også være dumt hvad hvis at der er 2 brugere med sammen ip? f.eks kunne det være på en skole)

Kan du ikke prøve at lave et eks?
Avatar billede ahv Nybegynder
15. april 2003 - 01:34 #15
Du kører vel dit system med sessions og i denne session med følger vel kun brugerens id? Andet ville hvertfald være lige gyldigt... Dette id fører du jo så bare ned og gemmer samme med den sidste aktive tid i tabellen, istedet for ip'en i mit eksempel.
Avatar billede sonic_86 Nybegynder
17. april 2003 - 17:47 #16
Tak for de gode forslag men jeg har fundet ud af at lave det sådan:

mysql_query("UPDATE brugere SET sidste_aktivitet=NOW() WHERE nick='$_SESSION[nick]'");

Lukket
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