Avatar billede cybermaster Nybegynder
06. april 2005 - 15:11 Der er 14 kommentarer og
1 løsning

Bruger Online Sessions Database

Hej med jeg, jeg kan simpelt hen ikke hitte ud af i mit hoved hvordan jeg laver det så ledes at når brugern logger ind bliver det skrevet i en database, og når brugeren så igen logger ud, bliver brugeren fjernet, eller afkrydest, men hvad nu hvis brugerne bare slukker for pcen eller netværket ryger, hvad er så mulighederne for at få brugen registret som offline i databasen, kan man evt gøre noget smart via sessions?

Tak på forhånd.
Avatar billede Slettet bruger
06. april 2005 - 15:27 #1
Du kan lave noget med en usynlig iframe som refresher en status i databasen hver 1½ minut eller sådan.

Og for at vise hvem der er online skal du bare vælger de bruger hvis status er sat til online inden for det sidste 1½ minut :)
Avatar billede Slettet bruger
06. april 2005 - 16:13 #2
Vil det ikke være nemmere med noget andet javascript gartzen. Tager det ikke for mange ressourcer at have en iframe kørende hele tiden?
Avatar billede Slettet bruger
06. april 2005 - 16:19 #3
At den skal opdatere hver 1½ minut tager jo faktisk ingen resurser..
I hvert fald ikke hvis man laver det som metatag:

<meta http-equiv="refresh" content="90;url=refreshmysession.php">
Avatar billede tobias_louv Nybegynder
06. april 2005 - 22:41 #4
På alle dine sider, kan du smide ind i databasen, at 'bruger' er online.
Når du skal se brugerens status, ser du efter om han/hun har skiftet side indenfor fx 10 minutter.
Hvis det er tilfældet, antar vi at brugeren er online.
Hvis ikke, så har brugeren ænten siddet længe med samme side åbent, eller lukket vinduet.
På denne måde, slipper du for en iframe, og du kan se, hvilken side hver enkel bruger er inde på, bare du lægger nok informationer i db'en
Avatar billede mysli Nybegynder
06. april 2005 - 23:16 #5
Hvis det kun skal være med brugere, så prøv noget lignende dette;

Lav en function, som sætter et "timestamp" i databasen, hver gang en side bliver vist.

Lav så en function som tjekker timestamp for en bruger, og viser brugeren er online, hvis timestamp + 60 > time().

Så hvis brugeren har været aktiv inden for 60 sekunder, står den som online.
Avatar billede mysli Nybegynder
06. april 2005 - 23:18 #6
Kan godt forklare med kode, men nu  har du da en idé om hvordan du skal bygge det op:)
Avatar billede cybermaster Nybegynder
06. april 2005 - 23:59 #7
men hvis man forstiller sig at den database hvor alle onlines ligger i... hvor bruger bliver tilføjet og slettet når de logger af... så er det jo stadivæk måske 700 rækker der skal søges igennem hvergang... vil det ikke tage en krig, hvis alle 700 brugere, gør det samtidigt... Håber i forstår?
Avatar billede cybermaster Nybegynder
07. april 2005 - 04:06 #8
Ja man kan jo self sætte limit på...
Avatar billede Slettet bruger
07. april 2005 - 08:13 #9
Et konkret eksempel: (Dette er den usynlige iframe som du skal have på alle sider..)

<?php
mysql_connect("localhost", "user", "pass");
mysql_select_db("mydb");
mysql_query("INSERT INTO onlinestatus (user, timestamp) VALUES (".$_SESSION['user'].", ".time().")");
mysql_query("DELETE FROM onloinestatus WHERE timestamp < ".(time() - 30));
?>
<html>
<head>
<title>Online status</title>
<meta http-equiv="refresh" content="30;url=refreshmysession.php">
</head>
<body>
</body>
</html>


Så simpelt kan det gøres.
Du finder så alle brugere som er online med følgende:

<?php
mysql_qeury("SELECT user FROM onlinestatus WHERE timestamp > ".(time() - 30));
?>
Avatar billede mysli Nybegynder
07. april 2005 - 08:32 #10
Idéen er af du ikke skal slette noget.

første function skal være noget lignende;

function setStamp($session){

if (isset($_SESSION['user'])){
//Her sættes tid + $session antal sekunder.
//Antallet af sekunder kommer an på hvor præcis din side skal være

$timestamp = time() + $session;
$user = $_SESSION['user'];

$sql = "UPDATE user_row SET timestamp ='$timestamp' WHERE user = '$user'";

mysql_query($sql) or die ("MySQL fejl: " mysql_error());

}}

Når du udskriver brugerne kører du følgende funktion;

if (CheckOnline($data['user']){
echo "<img src='img/online.gif'>";
} else {
echo "<img src='img/offline.gif'>";
}

Funktionen ser sådan her ud:

CheckOnline($user){

$time = time();

$sql = mysql_query("GET timestamp FROM user_row WHERE user = '$user'")or die (mySQL fejl: " mysql_error());

while ($data = mysql_fetch_array($sql)){
return ($time < $data['timestamp'])
}
}


Hvis denne funktion retunerer true, har brugeren været aktiv inden for den tid, du har sat som session.

Håber du forstår.
Sidder lige og har time, så kan ikke uddybe det meget bedre.
Avatar billede cybermaster Nybegynder
10. april 2005 - 13:49 #11
Kigger på begge eksembler, men da jeg ligger på cliche, og deres ftp er nede, bliver det først i den kommende uge...

Håber det er ok.
Avatar billede cybermaster Nybegynder
20. april 2005 - 16:12 #12
Lig et svar.
Avatar billede Slettet bruger
20. april 2005 - 17:54 #13
svar .. Hvad kom du frem til så?
Avatar billede cybermaster Nybegynder
21. april 2005 - 20:27 #14
Stor set dit eksempelt.
Kan du forklare mig dette. time() - 30 Hvad er de 30? minutter sekunder, timer eller hva?
Avatar billede Slettet bruger
22. april 2005 - 08:11 #15
sekunder
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