22. september 2007 - 21:00Der er
23 kommentarer og 1 løsning
Online status i brugersystem
Hej :-)
Jeg har lavet et brugersystem hvor de forskellige brugere skal kunne se om fx. deres venner er Online.
Er de Online skal det stå med grøn skrift i deres profil - Og er de derimod Offline, skal det stå med rød.
Når de logger ind skriver jeg: mysql_query("UPDATE user SET status='online' WHERE username='$_SESSION[username'");
Og hvis de så de trykker "log af", benytter jeg den samme kode hvor den så sætter status til Offline.
Men hvis nu de lukker siden, så bliver det ikke opdateret og de vil stadig stå som Online. Er der nogen der har en løsning på det?
Og lige en anden ting - Er det muligt at lave sådan, at brugeren ikke får lukket sin session efter de ca. 20 min? Løsningen må meget gerne være en, hvor man sparer lidt på forespørgelserne - Men min database kan klarer meget da jeg ikke er decideret hostet hos en udbyder, men på en server kun til mit site.
I dette særtema om aspekter af AI ser vi på skiftet fra sprogmodeller til AI-agenter, og hvordan virksomheder kan navigere i spændet mellem teknologisk hastighed og behovet for menneskelig kontrol.
Hvis det kun er antal online brugere der er logget ind, er det nemmere. Så opdaterer du bare et felt i brugertabellen med et tidsstempel, når de laver noget. Antallet af online kan du så definere til dem der f.eks. har foretaget sig noget inden for de sidste 5 minutter...
Hvad vil du have mig til at skrive ved 'udfør query' - Er ikke helt med ;P Jeg vil gerne have at folk kan se om deres venner i brugersystemet er online.
Udfør query skal bare connecte til databasen og fyre SQL'en af med mysql_query ;P
Jeg har bare defineret at man er online, hvis man har foretaget sig noget på siden, inden for de sidste fem minutter... 300 sek = 5 minutter - Altså hvis feltet sidste_aktivitet indeholder et UNIX timetamp som er højere end det den aktuelle tid, hvis du adderer 300
Har forsøgt mig med: <? session_start(); if(isset($_SESSION[username]) AND isset($_SESSION[password])) {
include("../../inc/cfg.php");
if(isset($_SESSION[username])) { $sql = "UPDATE user SET lastactivity = UNIX_TIMESTAMP() WHERE username = '$_SESSION[username]'" or die(mysql_error());; $connect = mysql_fetch_array($sql); }
$load = mysql_query("SELECT * FROM user WHERE username = '$_SESSION[username]'") or die(mysql_error()); $show = mysql_fetch_array($load); ?>
<? $online_users = "SELECT COUNT(username) AS antal_online FROM user WHERE lastactivity + 300 > UNIX_TIMESTAMP()" or die(mysql_error()); $show_users = mysql_fetch_array($online_users);
echo "Der er $show_users[username] online"; ?>
</body>
</html>
<? mysql_close(); } else { include("no_access.php"); } ?> ------------------------------------------------------------------------------ Det er den side brugerne kommer til, når de har logget ind.
jeg får fejlene: Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/public_html/test/user/access_user.php on line 9 Hej Henrik Nielsen Post Min profil
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/public_html/test/user/access_user.php on line 41 Der er online
I databasen har jeg lavet 2 felter. 'lastactivity' og 'bstatus' som er den som skal sættes til online eller offline. Under loginet bliver den opdateret til Online - Så skal den bare sættes til Offline hvis de logger ud, eller hvis de lukker siden (ikke er aktiv i 5 min).
<? session_start(); if(isset($_SESSION[username]) AND isset($_SESSION[password])) {
include("../../inc/cfg.php");
if(isset($_SESSION[username])) { $sql = mysql_query("UPDATE user SET lastactivity = UNIX_TIMESTAMP() WHERE username = '$_SESSION[username]'") or die(mysql_error()); $connect = mysql_fetch_array($sql); }
$load = mysql_query("SELECT * FROM user WHERE username = '$_SESSION[username]'") or die(mysql_error()); $show = mysql_fetch_array($load); ?>
<? $online_users = mysql_query("SELECT COUNT(username) AS antal_online FROM user WHERE lastactivity + 300 > UNIX_TIMESTAMP()") or die(mysql_error()); $show_users = mysql_fetch_array($online_users);
echo "Der er $show_users[username] online"; ?>
</body>
</html>
<? mysql_close(); } else { include("no_access.php"); } ?> ---------------------------------------------------------------------------- Får stadig fejlen: Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/public_html/test/user/access_user.php on line 9
Det virker :). Men hvordan får jeg så det vist, så man kan se om den enkelte bruger er online eller offline? Og er det muligt at lave sådan at ens sessions ikke "går ud" efter de ca. 20 min?
$online_test = mysql_query("SELECT username AS online FROM user WHERE lastactivity + 3600 > UNIX_TIMESTAMP() AND id='$_GET[id]'") or die(mysql_error()); $online_user = mysql_fetch_array($online_test);
Det er virker ikke helt som jeg har lavet det - Jeg står som offline, men er online.
Altså har man været inaktiv i ca. 20 min. bliver ens sessions deaktiveret dvs. man er logget ud af systemet - Er det muligt at lave en uendelig session?
$online_test = mysql_query("SELECT username AS online FROM user WHERE lastactivity + 3600 > UNIX_TIMESTAMP() AND id='$_GET[id]'") or die(mysql_error());
Skal være:
$online_test = mysql_query("SELECT username AS online FROM user WHERE lastactivity + 3600 < UNIX_TIMESTAMP() AND id='$_GET[id]'") or die(mysql_error());
Så skulle du være online ;)
Med hensyn til session, kan du lave det i en cookie ved at skrive:
// Sætter din cookie til 86400 sekunder eller 1 dag (eller 31536000 sekunder for 1 år) session_set_cookie_params(86400); session_start();
Sådan nu fandt jeg ud af det :P Du skal bare ind og ændre i din database, så at datatypen bliver til double. Det virkede ihvertfald for mig :) og så skal du bruge time() i stedet for UNIX_TIMESTAMP() i dit query
Skal session_set_cookie_params(); så sættes på alle sider? - Det skal session_start(); vel også, da brugerne også skal kunne bevæge sig rundt på de sider, gæsterne på siden også bevæger sig rundt på?
Med hensyn til session_set_cookie_params, er der så ikke problemer med tilladelse af cookies m.m.? Og hvad gør denne funktion egentlig?
Ja men hvis du vender '<' om, så viser den dig som online også selv om du er offline :P Derfor jeg lige rettede det.
men ja, session_start(); skal være på alle sider, jo der er problemer hvis der er en bruger som ikke tillader cookies, så kan han ikke benytte sig af sidens funktioner. Jeg er ikke helt klar over hvad funktionen rent faktisk gør, men jeg tror bare at den gemmer sessionen på brugerens computer. (men prøv at søg på google eller herinde efter det)
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.