zistenie ludi online

Programovacie jazyky, rady, poradňa...
turtlak69
Guru
Guru
Príspevky: 2896
Registrovaný: 10 máj 2007, 15:58
Bydlisko: /dev/null

zistenie ludi online

Príspevok od používateľa turtlak69 »

taaakze, po prihlaseni sa na stranku sa setne session s uzivatelovym id a zaroven sa mu v db zmeni stav na prihlaseny. bude to sluzit na vyhladavanie ludi co su prave prihlaseni. ked sa odhlasi, tj klikne na tlacitko odhlasit, unsetne sa session a zmeni sa udaj v db na odhlaseny. toto funguje dobre. ale moze nastat pripad, ze uzivatel sa neodhlasi a tym padom bude stale medzi prihlasenymi. tento pripad moze nastat ked vypne prehliadac alebo je dlho neaktivny. pri prihlaseni to setne este jeden cookie. ten kolacik ma meno userovho id a hodnota je datum kedy sa kolacik setol. vzdy po obnove stranky sa presetne cas a cas expiracie je tak 5 hodin. po 5 hodinach neaktivnosti ked niekam klikne, tak ho automaticky odhlasi. ale musi niekam kliknut. ale ak nikam neklikne, napriklad zavrie prehliadac alebo proste neklikne tak nastava tento problem. chcel by som to vyriesit takto..
na stranku by som vlozil nejaky neviditelny iframe (kde by bol automaticky refresh), kde by bol kod, ktory by overoval ako dlho je uzivatel neaktivny spustalo by sa to napriklad kazdych 10 minut. tym by som vyriesil to, ze proste neklikne nikde a aj tak ho odhlasi
dalej keby zavrel prehliadac, tak by sa tato udalost polala na server, kde by sa pustil dalsi php kod.na to sa tusim pouziva udalost onbeforeunload

no a problem je v tom, ze to neviem nakodit. myslim, ze je to par riadkov JS, ale JS vobec neovladam. php kod si napisem v pohode. ale keby mi s tymto niekto pomohol bol by som velmi vdacny

edit: problem s tym, ze by uzivatel nikam neklikal som vyriesil. pri zistovani ludi online, sa vyberu udaje z db tym co maju ako status ze prihlaseni a ti potom budu overeni. teda ich cookies. ale stale ostava problem, ako pustit php kod pri zatvoreni prehliadaca...
gwixt
Addict
Addict
Používateľov profilový obrázok
Príspevky: 3912
Registrovaný: 24 sep 2005, 16:50
Bydlisko: Trash-Can

Príspevok od používateľa gwixt »

no toto som tiez davnejsie riesil a myslim ze som dosiel k zaveru ze nic take ako zavretie aplikacie sa detekovat na stranke neda ...

resp mozes pouzit onunload JS event .. ale to asi nie je to co chces
turtlak69
Guru
Guru
Príspevky: 2896
Registrovaný: 10 máj 2007, 15:58
Bydlisko: /dev/null

Príspevok od používateľa turtlak69 »

no to je presne to co chcem, lebo to aj odchyti to zavretie okna, ale tam mozem pustit akurat tak alert a to mi je nanic. este ma napadlo, ze by vyskocil daky pop-up. to je tiez vec JS, ale tieto vykakovacky su bloknute. treba mi namiesto JS pustit php pri tej udalosti a to neviem vobec ako spravit. ale co som kukal stranky, tak to tiez nemaju nikde osetrene...
gwixt
Addict
Addict
Používateľov profilový obrázok
Príspevky: 3912
Registrovaný: 24 sep 2005, 16:50
Bydlisko: Trash-Can

Príspevok od používateľa gwixt »

dost pochybujem ze onunload sa vyvola pri zavreti okna ....

zavolanie nejakeho php na serveri spravis predsa vela sposobmi ... mozes otvorit nove okno, presmerovat/preloadovat stranku ....

edit: tak ten onunload teda asi funguje ... ale napr Opera ti to nezozerie ... v IE sa to spustilo .. FF neviem

kazdopadne to neriesi pripad ked uzivatel vypne JS
turtlak69
Guru
Guru
Príspevky: 2896
Registrovaný: 10 máj 2007, 15:58
Bydlisko: /dev/null

Príspevok od používateľa turtlak69 »

ten pripade ze vypne JS ma prilis netrapi. malokto chodi po strankach s vypnutym JS. a presnejsie je to udalost onbeforeunload a ani onunload. onunload sa spusti tusim len ked klikne uzivatel niekde co ho hodi het. ale to druhe sa spusti vzdy. a nevadi mi, ze pre IEckovych to nebude fungovat a pre tych co maju JS vypnuty. chcem len co najpresnejsi vylsedok. tieto detaily mi vadit prilis nebudu. ale ked sa zo stranky vypne napriklad 100 ludi tak chyba bude 100. ked z nich maju 5 IE a dvaja vypnuty JS, tak chyba by bola 7. toto by mi fakt trebalo. ale neviem ako mam vyvolat ten php script ked zavre okno :(
caesar1987
Addict
Addict
Používateľov profilový obrázok
Príspevky: 3001
Registrovaný: 02 okt 2005, 0:57
Bydlisko: Nové Zámky
Kontaktovať používateľa:

Príspevok od používateľa caesar1987 »

ja osobne povazujem za naj riesenie zaznamenavat ipcky..

pri kazdom prezreti stranky sa aktualizuje cas pri ip a pocita sa napr 5, alebo 10 minut...

teda ak je cas pri ip mensi ako teraz-10 minut, tak uz nie je online...

potom spravis z databazy selekt, kde cas je taky ze teraz-10 mint a spocitat riadky a mas to..
turtlak69
Guru
Guru
Príspevky: 2896
Registrovaný: 10 máj 2007, 15:58
Bydlisko: /dev/null

Príspevok od používateľa turtlak69 »

nad tym som aj ja rozmyslal, ALE...
je to taky portal, kde moze byt clovek prihlaseny cely den a neni podmienkou aby klikal. nieco ako booom alebo velkeveci. tam tiez ludia klikaju len obcas, ale prihlaseni su cely den. tato moznost je najucinnejsia, ale zaroven je otravne kazdych 10 alebo 20-alebo 90 alebo x minut sa prihlasovat. mne keby hojko forum odhlasilo, tak sa na to vybodnem a neprihlasim sa spat. proste by mi to bolo jedno. a verim, ze tak nerozmyslam sam...
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Príspevok od používateľa chrono »

turtlak69 napísal:mne keby hojko forum odhlasilo, tak sa na to vybodnem a neprihlasim sa spat.
Teba hojko.com neodhlasuje? Lebo mňa pri nečinnosti odhlási (a potom neviem, ktoré správy som už čítal, a ktoré ešte nie).
turtlak69
Guru
Guru
Príspevky: 2896
Registrovaný: 10 máj 2007, 15:58
Bydlisko: /dev/null

Príspevok od používateľa turtlak69 »

mna nie, neviem preco. ale je pravda, ze teraz hojko kukam kazdu chvilu, lebo chcem tento problem fixnut :D ale inak ma neodhlasuje. btw nevies ako by sa to dalo? lebo je zavadzajuce, ze tak velmi vela ludi je "online" a v skutocnosti sa len neodhlasili...
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Príspevok od používateľa chrono »

Zvyčajne sa to rieši tak, že sa pri každom obnovení stránky uloží aktuálny čas. A potom sa ako online berú ľudia, čo napr. obnovili stránku v posledných 5 minútach (a prihlásený sú tí, čo sa neodhlásili).
Mohol by si tam napr. pridať nejaký javascript, čo by niečo posielal serveru (informáciu o tom, že stránka sa ešte zobrazuje).
turtlak69
Guru
Guru
Príspevky: 2896
Registrovaný: 10 máj 2007, 15:58
Bydlisko: /dev/null

Príspevok od používateľa turtlak69 »

nooo to je napad. toto sa mi celkom aj paci, ale nastava problem. JS ovladam asi ako cinstinu. uz viem ako to spravim. vlozim na stranku neviditelny frame, ktory sa bude automaticky obnovovat a zapisovat do db cas. no a ked niekto pride na stranku, tak na index.php sa pusti kod. vycucnu sa z db vsetci co su akoze online a overia sa casy. takze ak cas nebude sediet, znamena to, ze dotycny zavrel prehliadac a automaticky updatne tabulku a zmeni jeho udaj na offline. a dalej vsetko ostava... uz len spravit ten ramik s tym autorefreshom. idem googlit :)

edit: hotovo. staci do hlavicky pridat

Kód: Vybrať všetko

<meta http-equiv="Refresh" content="600">
poprosim este nezamykat. este budem mat dotazov ako politici slubov...
ehm123
King
King
Príspevky: 1658
Registrovaný: 27 feb 2006, 6:45
Bydlisko: PD / Praha

Príspevok od používateľa ehm123 »

sprav to takto sice nieje to naj optimalizovanejsie riesenie,ale ma to tak tusim aj phpbb

ked sa uzivatel prihlasi tak mu setne new sessions...a do db sa zapise ze je prihlaseny + time poslednej vygenerovanej stranky...a pri kazdej vygenerovanej stranke sa do db vlozi new time...

a ked potrebujes zistit kdo je online tak si das query ze kdo ma cas vacssi ako bol pred 5timi (6timi atd) minutami je online...inak je offline
turtlak69
Guru
Guru
Príspevky: 2896
Registrovaný: 10 máj 2007, 15:58
Bydlisko: /dev/null

Príspevok od používateľa turtlak69 »

jj tieto sposoby, ze kedy generoval naposledy stranku su ucinne, ale ja robim taky portal ako booom a tam sa vyhladavaju ludia ktori su lognuti. a lognuti mozu byt kludne aj par hodin bez toho aby niekde klikli. no a toto je to riesenie. to ze to nie je optimalizovane mi vobec nevadi. hlavne ze to funguje a aj to funguje. len by som to chcel skraslit. pri refreshnuti sa zobrazia presypacie hodiny a je vidno ze sa s tym nieco deje. nerefreshne sa stranka ale len ram a to nevidno, ale keby nebolo absolutne nic vidno, tak by to bolo idealne. ale tieto kozmeticke zalezitosti asi poriesim nakoniec
caesar1987
Addict
Addict
Používateľov profilový obrázok
Príspevky: 3001
Registrovaný: 02 okt 2005, 0:57
Bydlisko: Nové Zámky
Kontaktovať používateľa:

Príspevok od používateľa caesar1987 »

tak to daj do iframe, kde bude napr reklama alebo nejake to logo a to sa moze refreshovat a nikomu to vadit nebude...
turtlak69
Guru
Guru
Príspevky: 2896
Registrovaný: 10 máj 2007, 15:58
Bydlisko: /dev/null

Príspevok od používateľa turtlak69 »

taaakze spravil som to nasledovne... do iframe som hodil tento subor

Kód: Vybrať všetko

<?php
session_start();
include ("./setup.php");

$thour=date('H');
$tmin=date('i');
$tsec=date('s');
$tmonth=date('n');
$tday=date('d');
$tyear=date('Y');

$now=mktime($thour,$tmin,$tsec,$tmonth,$tday,$tyear);

@mysql_query("UPDATE $tab_users SET user_lastsend = '$now', user_online='yes' WHERE user_id = '".$_SESSION['user_id']."'") ;
echo "

<html>
<head>
<meta http-equiv='Refresh' content='$live_time'>
</head>
<body>
</body>
</html>
";
?> 
a overujem pritomnost, vzdy ked sa spusti skript na indexovej stranke. cize vzdy ked niekto niekam klikne. a to takto:

Kód: Vybrať všetko

$filter=MySQL_Query("SELECT * FROM $tab_users WHERE user_online='yes'");

while ($row = mysql_fetch_assoc($filter))
{
$lastsend=$row[user_lastsend];

$thour=date('H');
$tmin=date('i');
$tsec=date('s');
$tmonth=date('n');
$tday=date('d');
$tyear=date('Y');

$now=mktime($thour,$tmin,$tsec,$tmonth,$tday,$tyear);

$rozdiel=$now - $lastsend;

if ($rozdiel > $live_time+60)
{
mysql_query("UPDATE $tab_users SET user_online = 'no' WHERE user_id = '$row[user_id]'");
}

}
a po tomto sa uz len z db vycucnu ti, ktori su ozaj online. tymto sposobom som dosiahol, ze session nevyprsi a uzivatel moze byt prihlaseny non-stop, no v ponuke online ludi bude len ked bude mat zapnutu tu stranku. a ked v noci vypne pc a rano pride na stranku, bude stale prihlaseny a po 10 minutach bude aj medzi online ludmi.
Napísať odpoveď