Stránka 1 z 1

[PHP+MYSQL] ako vypisat prihlasenych uzivatelov

Odeslat příspěvekNapsal: 13. 2. 2009 16:47
od People
Mam na stranke spravenu registraciu aj prihlasenie a chcel by som vediet ze ako mam spravit aby mi vypisalo vsetkych uzivatelov ktory su momentalne na stranke prihlaseny. Dakujem za rady.

Re: [PHP+MYSQL] ako vypisat prihlasenych uzivatelov

Odeslat příspěvekNapsal: 13. 2. 2009 17:03
od Ares952
ja to resim tak, ze jsem si vytvoril svoji vlastni spravu session v databazi a pak jde jen o vypis z databaze

o jinem reseni nevim (leda aktualizovat prubezne uzivatele v databazi, kdy vyvijel posledni aktivitu)

Re: [PHP+MYSQL] ako vypisat prihlasenych uzivatelov

Odeslat příspěvekNapsal: 13. 2. 2009 17:25
od People
No a ked to chcem teda spravit tak ako ty tak ako to mam spravit??

Re: [PHP+MYSQL] ako vypisat prihlasenych uzivatelov

Odeslat příspěvekNapsal: 13. 2. 2009 18:02
od Ares952
tabulka pro session:

Kód: Vybrat vše
CREATE TABLE `main` (
  `ses_id` varchar(32) NOT NULL default '',
  `ses_time` int(11) NOT NULL default '0',
  `ses_start` int(11) NOT NULL default '0',
  `ses_value` text NOT NULL,
  `ses_time2` varchar(20) default NULL,
  `ses_start2` varchar(20) default NULL,
  PRIMARY KEY  (`ses_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;


kod pro include soubor session.php:

Kód: Vybrat vše
$session = new session();
session_set_save_handler (array(&$session, '_open'),
                          array(&$session, '_close'),
                          array(&$session, '_read'),
                          array(&$session, '_write'),
                          array(&$session, '_destroy'),
                          array(&$session, '_gc'));
class session
{
    var $ses_sql;
    function db_connect() {
      return true;
    }
    function _open($path, $name) {
        return TRUE;
    }
    function _close() {
        $this->_gc(0);
        return TRUE;
    }
    function _read($ses_id) {
        $qr = "SELECT * FROM " . $this->ses_sql->sql_table . " WHERE ses_id = '$ses_id'";
        $session_res = $this->ses_sql->Query($qr);
        if (!$session_res)
           {
      return '';
      }
        $session_num = @mysql_num_rows($session_res);
        if ($session_num > 0) {
            $session_row = mysql_fetch_assoc ($session_res);
            $ses_data = $session_row["ses_value"];
            return $ses_data;
        } else {
            return '';
        }
    }
    function _write($ses_id, $data) {
        $qr = "UPDATE " . $this->ses_sql->sql_table
                     . " SET ses_time='" . time()
                     . "', ses_value='$data', ses_time2='" . date('Ymd-His') . "' WHERE ses_id='$ses_id'";
        $session_res = $this->ses_sql->Query($qr);
        if (!$session_res) {
            return FALSE;
        }
        if (mysql_affected_rows ()) {
            return TRUE;
        }
        $qr = "INSERT INTO " . $this->ses_sql->sql_table
                     . " (ses_id, ses_time, ses_start, ses_value, ses_time2, ses_start2)"
                     . " VALUES ('$ses_id', '" . time()
                     . "', '" . time() . "', '$data', '" . date('Ymd-His') . "', '" . date('Ymd-His') ."')";
        $session_res = $this->ses_sql->Query($qr);
        if (!$session_res) {     
            return FALSE;
        }         else {
            return TRUE;
        }
    }
    function _destroy($ses_id) {
        $qr = "DELETE FROM " . $this->ses_sql->sql_table
                     . " WHERE ses_id = '$ses_id'";
        $session_res = $this->ses_sql->Query($qr);
        if (!$session_res) {
            return FALSE;
        }         else {
            return TRUE;
        }
    }
    function _gc($life) {
        $ses_life = strtotime("-1 day");
        $qr = "DELETE FROM " . $this->ses_sql->sql_table
                     . " WHERE ses_time < $ses_life";
        $session_res = $this->ses_sql->Query($qr);
        if (!$session_res) {
            return FALSE;
        }         else {
            return TRUE;
        }
    }
}


dale pracujes se session beznym zpusobem

neber to jako funkcni reseni ktere staci prekopirovat a jede to, pouze jako inspiraci jak na to

z tabulky 'main' potom muzes vyseparovat online lidi

vlastni session Ti dava na vyber take dobu platnosti session a dalsi veci

Re: [PHP+MYSQL] ako vypisat prihlasenych uzivatelov

Odeslat příspěvekNapsal: 13. 2. 2009 19:36
od People
fuha na mna to vyzera dost zlozito, neexistuje nejaky lahsi sposob ako vypisat tych ktory su online???

Re: [PHP+MYSQL] ako vypisat prihlasenych uzivatelov

Odeslat příspěvekNapsal: 13. 2. 2009 19:49
od Nemo7
Myslím, že není jednodušší způsob. Nejde totiž jednoduše poznat uživatele on-line, protože se serverem komunikují pouze, když potřebují načíst stránku. HTTP protokol je bezstavový, "pamatování" se obchází pomocí session.
************
Jelikož je HTTP protokol bezstavový, není autentizace přes HTTP protokol (bez použití SSL) jednoduchá. Při každém spojení klienta se serverem je nutné provést autentizaci znovu nebo se musí posílat nějaký příznak, že uživatel je již autentizován.

http://www.fi.muni.cz/~kas/p090/referaty/2005-podzim/st/www.html

Re: [PHP+MYSQL] ako vypisat prihlasenych uzivatelov

Odeslat příspěvekNapsal: 13. 2. 2009 20:35
od People
No a nedalo by sa to spravit napriklad tak ze ked sa uzivatel prihlasi tak zapise jeho nick do databazy a vypise ho niekde na stranke ze je prihlaseny a bude tam zobrazeny az pokial sa neodhlasi?

Re: [PHP+MYSQL] ako vypisat prihlasenych uzivatelov

Odeslat příspěvekNapsal: 13. 2. 2009 20:40
od Nemo7
Problém je v tom, že ve webovce se uživatel nemusí odhlásit nikdy - musí se tak hlídat i čas posledního requestu. No a pokud je například nastaveno časově neomezené přihlášení ...

Re: [PHP+MYSQL] ako vypisat prihlasenych uzivatelov

Odeslat příspěvekNapsal: 13. 2. 2009 20:44
od People
no a keby to spravim tak ze po 15 minutach ho automaticky odhlasi tak potom by sa to tak dalo spravit, nie??

Re: [PHP+MYSQL] ako vypisat prihlasenych uzivatelov

Odeslat příspěvekNapsal: 13. 2. 2009 21:12
od beertje
No a kdo Ti bude to automatické odhlašování hlídat? (Ne že bych nevěděl jak to udělat - jen Tě chci popíchnout. ;-))

Mně (a zřejmě i všem ostatním tady) přijde mnohem jednodušší dotaz ve stylu SELECT * FROM uzivatele WHERE cas_posledni_aktivity > now() - 15 minut (například, i když já osobně bych pro "online uživatele" použil spíše 5 minut).

Re: [PHP+MYSQL] ako vypisat prihlasenych uzivatelov

Odeslat příspěvekNapsal: 13. 2. 2009 22:11
od gandor
jj a dany skript by sa dal este dopnit vyuzitim onunload eventu (spusti sa pri odchadzani stranky) a Ajaxu... Ak vies robit s ajaxom tak by to nemalo byt tazke....

Re: [PHP+MYSQL] ako vypisat prihlasenych uzivatelov

Odeslat příspěvekNapsal: 14. 2. 2009 00:16
od Vebloud
Tohle téma už se tu řešilo, doporučuji prohledat fórum...

Re: [PHP+MYSQL] ako vypisat prihlasenych uzivatelov

Odeslat příspěvekNapsal: 14. 2. 2009 00:21
od kernel_panic [passed]
onunload bych zvažoval až úplně v krajním případě, jelikož to je tak strašně prasácká událost, že ani ty nejprasáčtější prohlížeče ji už nepodporují, respektive podporují pouze s omezením a nutnou interakcí uživatele...