[PHP+MYSQL] ako vypisat prihlasenych uzivatelov

Webdesign, HTML, CSS, Flash, PHP, ASP, .NET, JavaScript. Kritika www stránek na Smetišti.

Moderátor: Moderátoři Živě.cz

Odeslat příspěvekod People 13. 2. 2009 15:47

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.
PC:ASUS M5A97 R2.0, AMD Vishera FX-6300, MSI R9 280 GAMING 3G, 2x Kingston HyperX 8GB DDR3, SSD Samsung 250 GB, CORSAIR CX 600W
PC:ASUS M4A88T-V EVO/USB3, AMD Phenom II X4 955BE 3,2Ghz, MSI N560GTX-M2D1GD5, KINGSTON 8GB DDR3, SEAGATE 1TB, CORSAIR CX430 V2
People
Junior
Uživatelský avatar

Odeslat příspěvekod Ares952 13. 2. 2009 16:03

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)
Naděje je motorem duše
Ares952
Mírně pokročilý
Uživatelský avatar

Odeslat příspěvekod People 13. 2. 2009 16:25

No a ked to chcem teda spravit tak ako ty tak ako to mam spravit??
PC:ASUS M5A97 R2.0, AMD Vishera FX-6300, MSI R9 280 GAMING 3G, 2x Kingston HyperX 8GB DDR3, SSD Samsung 250 GB, CORSAIR CX 600W
PC:ASUS M4A88T-V EVO/USB3, AMD Phenom II X4 955BE 3,2Ghz, MSI N560GTX-M2D1GD5, KINGSTON 8GB DDR3, SEAGATE 1TB, CORSAIR CX430 V2
People
Junior
Uživatelský avatar

Odeslat příspěvekod Ares952 13. 2. 2009 17:02

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
Naděje je motorem duše
Ares952
Mírně pokročilý
Uživatelský avatar

Odeslat příspěvekod People 13. 2. 2009 18:36

fuha na mna to vyzera dost zlozito, neexistuje nejaky lahsi sposob ako vypisat tych ktory su online???
PC:ASUS M5A97 R2.0, AMD Vishera FX-6300, MSI R9 280 GAMING 3G, 2x Kingston HyperX 8GB DDR3, SSD Samsung 250 GB, CORSAIR CX 600W
PC:ASUS M4A88T-V EVO/USB3, AMD Phenom II X4 955BE 3,2Ghz, MSI N560GTX-M2D1GD5, KINGSTON 8GB DDR3, SEAGATE 1TB, CORSAIR CX430 V2
People
Junior
Uživatelský avatar

Odeslat příspěvekod Nemo7 13. 2. 2009 18:49

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
Scio me nihil scire
Nemo7
Junior

Odeslat příspěvekod People 13. 2. 2009 19:35

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?
PC:ASUS M5A97 R2.0, AMD Vishera FX-6300, MSI R9 280 GAMING 3G, 2x Kingston HyperX 8GB DDR3, SSD Samsung 250 GB, CORSAIR CX 600W
PC:ASUS M4A88T-V EVO/USB3, AMD Phenom II X4 955BE 3,2Ghz, MSI N560GTX-M2D1GD5, KINGSTON 8GB DDR3, SEAGATE 1TB, CORSAIR CX430 V2
People
Junior
Uživatelský avatar

Odeslat příspěvekod Nemo7 13. 2. 2009 19:40

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í ...
Scio me nihil scire
Nemo7
Junior

Odeslat příspěvekod People 13. 2. 2009 19:44

no a keby to spravim tak ze po 15 minutach ho automaticky odhlasi tak potom by sa to tak dalo spravit, nie??
PC:ASUS M5A97 R2.0, AMD Vishera FX-6300, MSI R9 280 GAMING 3G, 2x Kingston HyperX 8GB DDR3, SSD Samsung 250 GB, CORSAIR CX 600W
PC:ASUS M4A88T-V EVO/USB3, AMD Phenom II X4 955BE 3,2Ghz, MSI N560GTX-M2D1GD5, KINGSTON 8GB DDR3, SEAGATE 1TB, CORSAIR CX430 V2
People
Junior
Uživatelský avatar

Odeslat příspěvekod beertje 13. 2. 2009 20:12

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).
beertje
Junior

Odeslat příspěvekod gandor 13. 2. 2009 21:11

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....
gandor
Mírně pokročilý

Odeslat příspěvekod Vebloud 13. 2. 2009 23:16

Tohle téma už se tu řešilo, doporučuji prohledat fórum...
Žít a nechat žít, ty máš svůj názor, já mám svůj názor, já ti nebudu nutit svůj, nemusím souhlasit s tvým, ale udělám vše, abys ho mohl svobodně vyjádřit.
Vebloud
VIP uživatel
Uživatelský avatar

Odeslat příspěvekod kernel_panic [passed] 13. 2. 2009 23:21

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...
k bití internetovejch nihilistů jsem už příliš starej, ale za ty roky mně narostl krunýř, o kterej se vždy báječně rozplácnete; takže, mám zůstat čelem nebo?
kernel_panic [passed]
Přeborník Živě roku 2008
Uživatelský avatar


Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 0 návštevníků