Raddu Posted August 2, 2013 Report Posted August 2, 2013 Salut RST ! Sunt incepator in php si voiam sa va intreb ceva . Am creat o baza de date si am facut un sistem de login cu ajutorul php.Cand ma loghez utilizatorul verifica username-ul si parola sa vada daca sunt in baza de date si daca sunt corecte modifica campul "online" din 0 in 1 si atunci and se delogheaza din "1" in "0". Voiam sa fac o rubrica in care poti vedea utilizatorii activi . Problema e ca eu vreau sa vad utilizatorii care vizualizeaza site-ul la un anumit moment (cand intru in rubrica) , dar daca ii contorizez doar pe cei care au la campul "online" 1 ei nu sunt neaparat online pe site ci poate nu s-au delogat folosind butonul "log out". Am observat ca si la acest forum problema e aceeasi. E vreo metoda sa arati chiar "utilizatorii activi" in acel moment ? . M-am gandit ca as putea afisa "utilizatorii activi in ultimele x minute" si dupa x minute de inactivitate sa ii sterg automat , dar vreau sa va intreb daca exista vreo metoda "completa" , folosind poate chiar si java , ajax etc. Quote
eusimplu Posted August 2, 2013 Report Posted August 2, 2013 Algoritmul pentru „utilizatori online” se bazeaza pe ultima accesare a site-ului, deci inevitabil dupa acele x minute de inactivitate, o pierdere de timp consider eu. Nu ai ce face cu javascript pentru a afla utilizatorii online, poate doar sa-l tii online pe vizitator cand timp e „idle” dar nu a inchis tabul. Quote
CrisTany Posted August 2, 2013 Report Posted August 2, 2013 De ce nu folosesti cookies ?EDIT: greseala mea mai sus, am inteles altceva. Quote
GarryOne Posted August 2, 2013 Report Posted August 2, 2013 deci, cand se logheaza, initializezi sesiunea 'logged', sa zicem, cu 1 si o faci sa expire in 30 de secunde sau cat vrei tu. Si de fiecare data cand va accesa o noua pagina, o vei initializa din nou, iar daca nu va intra pe nici-o pagina, va expira, asa ca vei sti din 30 in 30 de secunde cine e online si cine nu. Quote
EAdrian Posted August 2, 2013 Report Posted August 2, 2013 Algoritmul pentru „utilizatori online” se bazeaza pe ultima accesare a site-ului, deci inevitabil dupa acele x minute de inactivitate, o pierdere de timp consider eu. Nu ai ce face cu javascript pentru a afla utilizatorii online, poate doar sa-l tii online pe vizitator cand timp e „idle” dar nu a inchis tabul.?in s? te contrazic, tocmai cu js faci toat? treaba... Quote
eusimplu Posted August 2, 2013 Report Posted August 2, 2013 ?in s? te contrazic, tocmai cu js faci toat? treaba...Dezvolta. Quote
Active Members dancezar Posted August 2, 2013 Active Members Report Posted August 2, 2013 Pui in tabel un camp last_refresh ce v-a retine time() de ultima data utilizatorul o pagina.De fiecare data cand utilizatorul acceseaza o pagina ii updatezi ora.Iar ca sa vezi cei care sunt online faci aproape tot din sql$Sql="SELECT * FROM useri WHERE online=1 AND last_refresh<".time()-600;Iar cand acceseaza o pagina folosesti$Sql="UPDATE useri SET last_refresh=".time()-600." where user_id=".$id; Quote
EAdrian Posted August 2, 2013 Report Posted August 2, 2013 (edited) Dezvolta.Dup? cum ?tim to?i JS e client side, atunci când utilizatorul este online un schedule ar putea trimite anumite informa?ii c?tre server side (de exemplu ora exact?) ?i o coloan? "last_activity" apoi urmeaz? o verificare"... WHERE `last_activity` < '".(time() - 30)."'"PS: Atunci când el, utilizatorul nu mai este online, JS nu mai trimite nimic c?tre server.De aici po?i dezvolta cum vrei... ideea în sine conteaz?.EDIT: Dac? nu vrei în real-time, e mult mai bine ce zice dannywebIar cand acceseaza o pagina folosesti$Sql="UPDATE useri SET last_refresh=".time()-600." where user_id=".$id;Ce este cu ro?u nu ar trebui s? mai existe în query Edited August 2, 2013 by EAdrian Quote
eusimplu Posted August 2, 2013 Report Posted August 2, 2013 @EAdrian: ideea ta este interesanta, dar dupa cum consider ca nu ai observat deja precizasem ca javascript e bun doar la a tine utilizatorul online cat timp ramane pe o singura pagina, dar javascript mai are o problema, mananca multe resurse daca tot faci request-uri la intervale scurte. Quote
EAdrian Posted August 2, 2013 Report Posted August 2, 2013 @EAdrian: ideea ta este interesanta, dar dupa cum consider ca nu ai observat deja precizasem ca javascript e bun doar la a tine utilizatorul online cat timp ramane pe o singura pagina, dar javascript mai are o problema, mananca multe resurse daca tot faci request-uri la intervale scurte.Alternativ am observat c? nu are nevoie de real-timeDepinde ?i cum folose?ti JS... dac? folose?ti cu cap n-ai probleme. vezi https://mega.co.nz/ Quote
GarryOne Posted August 2, 2013 Report Posted August 2, 2013 (edited) Pui in tabel un camp last_refresh ce v-a retine time() de ultima data utilizatorul o pagina.De fiecare data cand utilizatorul acceseaza o pagina ii updatezi ora.Iar ca sa vezi cei care sunt online faci aproape tot din sql$Sql="SELECT * FROM useri WHERE online=1 AND last_refresh<".time()-600;Iar cand acceseaza o pagina folosesti$Sql="UPDATE useri SET last_refresh=".time()-600." where user_id=".$id;Sper ca iti dai seama ca asa "omori" serverul in zadar. E practic varianta mea, doar ca cosuma mai multe resurse.PS: http://stackoverflow.com/questions/7867517/how-to-show-online-users-with-ajax Edited August 2, 2013 by GarryOne Quote
EAdrian Posted August 2, 2013 Report Posted August 2, 2013 Sper ca iti dai seama ca asa "omori" serverul in zadar. E practic varianta mea, doar ca cosuma mai multe resurse.PS: java - How to show online users with ajax - Stack OverflowDe ce s? omori serverul? E un am?rât de update...PS: El nu are nevoie de real-time Quote
Raddu Posted August 2, 2013 Author Report Posted August 2, 2013 Mi-ar placea sa fie cat de real-time se poate . Apropo , cum pot sa fac sa se actualizeze tot timpul baza de date in timp ce sunt pe o pagina ? . Am facut de exemplu un while infinit in php si nici macar nu imi incarca pagina. Quote
EAdrian Posted August 2, 2013 Report Posted August 2, 2013 Mi-ar placea sa fie cat de real-time se poate . Apropo , cum pot sa fac sa se actualizeze tot timpul baza de date in timp ce sunt pe o pagina ? . Am facut de exemplu un while infinit in php si nici macar nu imi incarca pagina.Trebuie sa citesti despre AjaxPHP e server side (trebuie s? ?tii care este diferen?a dintre client-side ?i server-side) Quote
Raddu Posted August 2, 2013 Author Report Posted August 2, 2013 Ok , sa zicem ca reusesc chestia cu ajax cu updatarea . Pot sa o updatez la fiecare 2-3 secunde fara sa aiba vreo problema cu serverul sau altceva ? Quote
GarryOne Posted August 2, 2013 Report Posted August 2, 2013 De ce s? omori serverul? E un am?rât de update...PS: El nu are nevoie de real-timeFiecare query in plus presupune o incarcare mai grea a paginii, iar la un site cu vizitatori multi, se simte. Quote
eusimplu Posted August 2, 2013 Report Posted August 2, 2013 Ar mai fi o posibilitate, dar nu stiu cat de precisa este.Cand utilizatorul intra pe site il adaugi in baza de date si-i setezi un cookie ca sa stii sa nu-l mai adaugi inca o data. Iar cu javascript cand inchide tabul il deloghezi:window.onbeforeunload = function(){ // Aici faci cererea ajax} Quote
TheTime Posted August 2, 2013 Report Posted August 2, 2013 Nu vreau sa va stric dezbaterea, dar vedeti ca exemplele alea de SQL sunt vulnerabile. Stay safe! Quote
Raddu Posted August 2, 2013 Author Report Posted August 2, 2013 (edited) Chestia aia cu onbeforeunload nu deschidea o fereastra care te intreba daca vrei sa stai pe pagina sau nu ? Ca nu prea imi place chestia asta. Edited August 2, 2013 by Raddu Quote
Active Members dancezar Posted August 2, 2013 Active Members Report Posted August 2, 2013 (edited) Nu vreau sa va stric dezbaterea, dar vedeti ca exemplele alea de SQL sunt vulnerabile. Stay safe!Asta e treaba lui el doar ne-a intrebat de cum poate realiza scriptul.Apropo Radu sa nu uiti sa sintetizezi datele la fiecare query.//Gary nu am vazut ca ai postat si tu o varianta asemanatoare dar oricum e cam exagerat 30 de secunde la server-side asta ar insemna ca el in 30 de secunde ar trebuie sa fie activ adica un singur utilizator ar trebui sa faca un request in maxim 30 de secunde ,cel mai bine e un timp de raspuns de cel putin 5 minute. Edited August 2, 2013 by danyweb09 Quote
Raddu Posted August 2, 2013 Author Report Posted August 2, 2013 (edited) sa nu uiti sa sintetizezi datele la fiecare query.Romanian please Deci sa inteleg ca tot ce am de facut e ceva de genul :setInterval(function() {$.get('update.php'); }, 5000); Edited August 2, 2013 by Raddu Quote
Active Members dancezar Posted August 2, 2013 Active Members Report Posted August 2, 2013 $Sql="UPDATE useri SET last_refresh=".time()-600." where user_id=".$id;Spre exemplu mai sus user_id nu este sintetizat,un utilizator rau voitor poate crea un timebased sqlijection creea ce nu e ok.Cel mai bine este sa faci asta inainte de a crea query-ul sql$id=(int)$id;apoi comanda sql Quote
Raddu Posted August 3, 2013 Author Report Posted August 3, 2013 Am incercat cu acest script :<script>setInterval(function() { <?php//if ($_COOKIE["conn"]!=1) exit();$user="xxx"; $pass="xxx";include 'connect.php'; date_default_timezone_set( 'Europe/Bucharest' ); $date = strftime("%d %b %Y %H:%M:%S %P"); $sql = "UPDATE accounts SET last='$date' WHERE username='$user' AND password='$pass'"; $res = mysql_query ($sql) ;?> alert("Script Exec");}, 6000);</script>"last" se updateaza doar in momentul cand pornesc pagina , in schimb alert-ul imi vine la fiecare 6 secunde. Quote
Active Members dancezar Posted August 3, 2013 Active Members Report Posted August 3, 2013 fa scriptul php intr-un fisier separat cu ai spus tu prima oarasetInterval(function() {$.get('update.php'); }, 60); Quote
Raddu Posted August 3, 2013 Author Report Posted August 3, 2013 (edited) Deci : Am facut pe serverul de pe net un html separat in care am scris numai asta :<script type="text/javascript">setInterval(function() { $.get('refresh.php'); alert("Executed"); }, 6000);</script> Cand intru in html , nu se intampla nimic oricat ai astepta , nici macar alerta.Dar daca intru in refresh.php din browser "last" se updateaza.refresh.php e in acelasi folder cu html-ul .Am incercat si sa ii dau adresa completa a refresh.php (cu tot cu adresa web a serverului)dar nu e nicio diferenta Edited August 3, 2013 by Raddu Quote