Unlimited Skrevet 31. oktober 2005 Del Skrevet 31. oktober 2005 Hei, finnes det coder som kan vise online'e brukere på en php side? Lenke til kommentar
mikaelandre Skrevet 31. oktober 2005 Del Skrevet 31. oktober 2005 ja... du kan feks lagre alle sessions i en tabell, og telle antallet ved lasting av siden. ikke spesielt kjapt med mange brukere, men det funker. hvis du lurte på om det finnes en innebygd funksjon i php, så tror jeg ikke det. har ihvertfall aldri hørt om en Lenke til kommentar
Magnus Holm Skrevet 31. oktober 2005 Del Skrevet 31. oktober 2005 Hva med følgende kode-snipp: <?php session_start(); $online = $_SESSION['online']; if (!in_array($_SERVER['REMOTE_ADDR'], $online)) { $online[] = $_SERVER['REMOTE_ADDR']; } echo count($online); ?> Lenke til kommentar
fredeil Skrevet 31. oktober 2005 Del Skrevet 31. oktober 2005 (endret) Eller hva med denne ?: <? $remote = $_SERVER["REMOTE_ADDR"]; $file = "online.txt"; $timeoutseconds = 60; //Timeout $timestamp = time(); $timeout = ($timestamp-$timeoutseconds); $fp = fopen("$file", "a+"); $write = $remote."||".$timestamp."\n"; fwrite($fp, $write); fclose($fp); $online_array = array(); $file_array = file($file); foreach($file_array as $newdata){ list($ip, $time) = explode("||", $newdata); if($time >= $timeout){ array_push($online_array, $ip); } } $online_array = array_unique($online_array); $online = count($online_array); if($online == "1"){ echo "$online"; }else{ echo "$online"; } ?> Endret 31. oktober 2005 av fredeil Lenke til kommentar
Magnus Holm Skrevet 31. oktober 2005 Del Skrevet 31. oktober 2005 Og hva er vitsen med denne? if($online == "1"){ echo "$online"; }else{ echo "$online"; } Lenke til kommentar
LoS Skrevet 31. oktober 2005 Del Skrevet 31. oktober 2005 Hva med følgende kode-snipp:<?php session_start(); $online = $_SESSION['online']; if (!in_array($_SERVER['REMOTE_ADDR'], $online)) { $online[] = $_SERVER['REMOTE_ADDR']; } echo count($online); ?> 5084777[/snapback] Fungerer virkelig den der? Med tanke på at hver bruker får hver sin session. Lenke til kommentar
Zic0 Skrevet 31. oktober 2005 Del Skrevet 31. oktober 2005 Det vil jeg NEPPE tro... Lenke til kommentar
Magnus Holm Skrevet 31. oktober 2005 Del Skrevet 31. oktober 2005 Det vil jeg NEPPE tro...5085505[/snapback] Hvorfor skulle den ikke virke? Lenke til kommentar
Zic0 Skrevet 31. oktober 2005 Del Skrevet 31. oktober 2005 Fordi session er noe hver enkelt bruker får tildelt. Det vil si man kan ikke se alle med $_SESSION funkskjonen. Lenke til kommentar
Magnus Holm Skrevet 31. oktober 2005 Del Skrevet 31. oktober 2005 Okey, da får jeg prøve meg på nytt... Lenke til kommentar
mikaelandre Skrevet 31. oktober 2005 Del Skrevet 31. oktober 2005 som jeg sa i toppen, lagre i en tabell, evt. i ei fil, alle session_id og sist de lastet siden. så kan du feks si at alle som lastet siden de siste 10 min, og ikke har gått videre til ei anna, er online. uten at du har loggin/loggut på siden din er det umulig å vite når de drar fra siden din, for alt du vet kan de jo sitte og lese på den samme siden i 10 min. jeg ville lagret session_id, timestamp, sidenavn i en tabell. ved lasting henter du da ut alle sessions på den siden de siste 10 min, og teller hvor mange det blir. hvis gjeldende session er registrert fra før oppdaterer du posten i tabellen med ny timestamp og ny side. Lenke til kommentar
Ernie Skrevet 31. oktober 2005 Del Skrevet 31. oktober 2005 (endret) Jeg er sånn passelig overrasket over hvor vanskelig enkelte skal ha det til. Eneste bruker hittil som er i nærheten av noe raskt (selv om vedkommende ikke tror det selv) er mikaelandre. Her er en god løsning kort forklart: - Legg inn session til brukere som er logget inn i en tabell i databasen (gjerne også gjester hvis man ønsker det) - Kjør en sql-spørring ala denne: "SELECT COUNT(et felt) AS antall FROM tabellen med påloggede brukere" - Slett ugyldig session i tabellen (typisk "utgått på dato") Verre er det ikke. Dette er en løsning jeg vet er brukt i phpbb. Prinsippet mener jeg man finner i ipb og vbulletin også. Endret 31. oktober 2005 av Ernie Lenke til kommentar
mikaelandre Skrevet 31. oktober 2005 Del Skrevet 31. oktober 2005 ja, jeg gjør det slik selv, og ipb gjør det samme. men det går treigt med veldig mange brukere, og ipb cacher på en eller annen måte antallet, de kan ikke regne ut for hver sidevisning. Lenke til kommentar
Ernie Skrevet 31. oktober 2005 Del Skrevet 31. oktober 2005 (endret) ja, jeg gjør det slik selv, og ipb gjør det samme. men det går treigt med veldig mange brukere, og ipb cacher på en eller annen måte antallet, de kan ikke regne ut for hver sidevisning. 5085914[/snapback] Det er mulig de cacher det, men såvidt jeg vet drar iallfall phpbb det direkte ut av databasen uten noen caching. Det eneste de gjør er å ikke gjøre noe hvis det har gått 1min siden forige oppdatering for brukeren. Da bare sjekker de at session er gyldig og ferdig med det. Endret 31. oktober 2005 av Ernie Lenke til kommentar
Unlimited Skrevet 31. oktober 2005 Forfatter Del Skrevet 31. oktober 2005 takk Ernie, skal prøve det Lenke til kommentar
Lokaltog Skrevet 1. november 2005 Del Skrevet 1. november 2005 Det som kan være lurt er å sette opp en cronjob som oppdaterer en cache-fil med var_export (caching med var_export/PHP-fil som inkluderes er veldig effektivt og enkelt å gjennomføre) en gang hvert 5. eller 10. minutt. Siden sessions er en ganske upresis greie, og folk kan være utlogget en god stund før session'en blir forkastet, så tror jeg det er en god løsning å cache på denne måten. Iallefall på nettsteder med mange brukere. Lenke til kommentar
???????? Skrevet 1. november 2005 Del Skrevet 1. november 2005 Ernie, siden du vil fokusere på hastighet så må du også huske å indeksere (eventuelt gjøre felter unike). Videre er det viktig å merke seg det Lokaltog sier, det er ikke noe poeng at dette skal gjøres for hver bruker som titter innom siden - spesielt dersom det er en større side. Mens vi først er inne på hastighet, og siden dette ikke er lagring av viktig data så kan tabelltypen faktisk øke hastigheten. Ved å bruke MEMORY, eller for de som begynte å programmere før MySQL 5 kjenner de som HEAP, tabeller. Hvis dataene skal lagres for bruk i en teller også så er det viktig å dele de opp, f.eks. ved dager, uker eller måneder - bruk da MERGE. En liten ting som jeg ikke helt skjønner så er det hvorfor dere absolutt vil bruke session_id? Det betyr at en person som går inn på siden med to browsere vil da telles som to brukere. Jeg synes det vil være bedre å bruke IP. Lykke til Lenke til kommentar
mikaelandre Skrevet 1. november 2005 Del Skrevet 1. november 2005 En liten ting som jeg ikke helt skjønner så er det hvorfor dere absolutt vil bruke session_id? Det betyr at en person som går inn på siden med to browsere vil da telles som to brukere. Jeg synes det vil være bedre å bruke IP. Det kan jo være mange med samme ip også... feks folk som sitter på samme lan. da blir det telt for få. Lenke til kommentar
Ernie Skrevet 1. november 2005 Del Skrevet 1. november 2005 (endret) Ernie, siden du vil fokusere på hastighet så må du også huske å indeksere (eventuelt gjøre felter unike). Videre er det viktig å merke seg det Lokaltog sier, det er ikke noe poeng at dette skal gjøres for hver bruker som titter innom siden - spesielt dersom det er en større side.5088815[/snapback] Sant nok, men skal man holde på med en så stor side så tror jeg man vet (eller bør skaffe folk som vet) hvordan man driver en større side.Mens vi først er inne på hastighet, og siden dette ikke er lagring av viktig data så kan tabelltypen faktisk øke hastigheten. Ved å bruke MEMORY, eller for de som begynte å programmere før MySQL 5 kjenner de som HEAP, tabeller. Hvis dataene skal lagres for bruk i en teller også så er det viktig å dele de opp, f.eks. ved dager, uker eller måneder - bruk da MERGE. 5088815[/snapback] Godt poeng.En liten ting som jeg ikke helt skjønner så er det hvorfor dere absolutt vil bruke session_id? Det betyr at en person som går inn på siden med to browsere vil da telles som to brukere. Jeg synes det vil være bedre å bruke IP. 5088815[/snapback] Vel, da får du et enormt problem med skoler da ... Mange skoler som deler en IP, og da kan du i verstefall få flere hundre stykker på den ene IPen. Skal man bare telle påloggede (ikke gjester) så er forsåvidt brukerid en mulighet. Endret 1. november 2005 av Ernie Lenke til kommentar
???????? Skrevet 1. november 2005 Del Skrevet 1. november 2005 Tja... de fleste skoler jeg kjenner til har ip adresser til alle maskinene sine. Nå er det veldig lenge siden jeg gikk på ungdomsskole, men kanskje du kan få et problem med akuratt disse - men i hvilken grad dette vil lage problemer for sider jeg lager er ikke så aktuelt. Jeg skal ikke være vrangere enn at jeg ser problemet. Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå