inchidere fereastra

Secţiune dedicată începatorilor.

Moderatori: Moderatori, Start Moderator

vekand
Average Member
Mesaje: 83
Membru din: Dum Mai 03, 2015 9:15 am

Re: inchidere fereastra

Mesajde vekand » Dum Oct 02, 2016 4:18 pm

Pe primul il pui in tagul <head> sau oriunde in pagina in care vrei sa fie rulat. Daca vei sa extragi pentru toti userii, nu te mai folosesti de userid, ci direct din tabela useri, toti userii care sint logati si au termenul depasit.



vekand
Average Member
Mesaje: 83
Membru din: Dum Mai 03, 2015 9:15 am

Re: inchidere fereastra

Mesajde vekand » Dum Oct 02, 2016 4:31 pm

P.S. Trimiterea raspunsului inapoi catre ajax nu este obligatorie, am pus-o doar sa te verifici sau daca folosesti ulterior datele intoarse. Studiaza partea de ajax si vezi cum se foloseste. Delogarea o faci in logout.php, deci poti rezolva acolo tot ce ai nevoie.

Mister
Junior Member
Mesaje: 43
Membru din: Joi Feb 11, 2016 7:41 pm

Re: inchidere fereastra

Mesajde Mister » Lun Oct 03, 2016 4:44 pm

Chiar nu imi iese si mie se pare complicat... .Este mai usor asta?
am gasit codul acesta si mi se pare mai simpla povestea dar nu inteleg de ce imi da erori, la function nu trebuie pusa in header?
http://www.dotnetvishal.com/2013/02/ale ... event.html

vekand
Average Member
Mesaje: 83
Membru din: Dum Mai 03, 2015 9:15 am

Re: inchidere fereastra

Mesajde vekand » Lun Oct 03, 2016 6:37 pm

Din ce vad in acel cod este o atentionare la inchiderea browserului, dar nu face delogare.
Delogarea (in baza de date) se poate face numai cu ajax, n-ai alta cale.

Mister
Junior Member
Mesaje: 43
Membru din: Joi Feb 11, 2016 7:41 pm

Re: inchidere fereastra

Mesajde Mister » Lun Oct 03, 2016 6:53 pm

am rezolvatsa zic asa, am folosit tot variabile si m-am folosit de timp

Cod: Selectaţi tot

      if (isset($_SESSION['LAST_ACTIVITY']) && (time() - $_SESSION['LAST_ACTIVITY'] > 900))
      {
      // last request was more than 30 minutes ago
         $dd = Config::$g_con->prepare('UPDATE `'.Config::$accounttabel.'` SET `rpgon` = 0 WHERE `'.Config::$playeridvariable.'` = '.$_SESSION['user'].'');
         $dd->execute();                  
         unset($_SESSION['user']);
         session_destroy();       
      }
      $_SESSION['LAST_ACTIVITY'] = time(); // update last activity time stamp


peste 900 secunde da delogare dar mai am o singura problema trebuie sa dau refresh ca sa vad ca e delogat

vekand
Average Member
Mesaje: 83
Membru din: Dum Mai 03, 2015 9:15 am

Re: inchidere fereastra

Mesajde vekand » Lun Oct 03, 2016 7:23 pm

Ajax nu stie de SESSION, este o functie JavaScript, dar in success: poti prelua raspunsul ajax (cu acel echo $variabila; in fisierul PHP) ca string, pe care sa-l afisezi apoi intr-un element HTML (ex. un input text) in pagina din care apelezi functia ajax.

Mister
Junior Member
Mesaje: 43
Membru din: Joi Feb 11, 2016 7:41 pm

Re: inchidere fereastra

Mesajde Mister » Mar Oct 04, 2016 3:18 pm

ok, mai am o singura intrebare, daca eu am o functie care face ceva, trebuie sa dea cineva reshresh ca sa se intampla functia, cum pot face sa se intampla functia fara sa fie siteul deschis?
Gen eu am aceasta functie counthonlinetime(); si vreau sa fie apelata din 10 in 10 secunde am pus in index asa counthonlinetime(); dar trebuie sa dea cineva reshresh sau sa stea pe site ca sa fie apelata

vekand
Average Member
Mesaje: 83
Membru din: Dum Mai 03, 2015 9:15 am

Re: inchidere fereastra

Mesajde vekand » Mar Oct 04, 2016 3:38 pm

La asta trebuie sa-ti raspunda cineva care a mai folosit. Eu n-am folosit, dar stiu ca un fisier PHP poate fi rulat cu o comanda externa (fisier.sh) care apeleaza fisierul PHP la un anumit interval de timp prestabilit.

Mister
Junior Member
Mesaje: 43
Membru din: Joi Feb 11, 2016 7:41 pm

Re: inchidere fereastra

Mesajde Mister » Mar Oct 04, 2016 3:41 pm

vekand scrie:La asta trebuie sa-ti raspunda cineva care a mai folosit. Eu n-am folosit, dar stiu ca un fisier PHP poate fi rulat cu o comanda externa (fisier.sh) care apeleaza fisierul PHP la un anumit interval de timp prestabilit.



ok merci mult pentru ajutor, nu cred ca imi va raspunde cineva prea curand daca este vorba de asta, deci voi citi in continuare pe net despre ajax si coockieuri

nevvermind
Senior Member
Mesaje: 1264
Membru din: Mar Iun 22, 2010 3:17 pm

Re: inchidere fereastra

Mesajde nevvermind » Mar Oct 04, 2016 4:48 pm

Mister scrie:ok, mai am o singura intrebare, daca eu am o functie care face ceva, trebuie sa dea cineva reshresh ca sa se intampla functia, cum pot face sa se intampla functia fara sa fie siteul deschis?
Gen eu am aceasta functie counthonlinetime(); si vreau sa fie apelata din 10 in 10 secunde am pus in index asa counthonlinetime(); dar trebuie sa dea cineva reshresh sau sa stea pe site ca sa fie apelata


Runtime-ul JS-ului (chestia care executa codul JS), nu este executat in lipsa tab-ului/browser-ului. Inchizi tab-ul = se opreste executia. Server-side e simplu: faci un cron php. Pe partea de client-side nu poti fara artificii. Si nici nu-ti sugerez. Din cate observ, intinzi prea mult abilitatile browser-ului . Asta inseamna ca a) ori faci ceva super inovator (nu cred) sau b) design-ul aplicatiei tale ar trebui re-considerat. Adica: de ce cauti atat de mult sa-ti dai seama daca e logat sau nu? Care-i faza?
Facusi un canal de php pe freenode - ##php-ro : https://webchat.freenode.net/

Mister
Junior Member
Mesaje: 43
Membru din: Joi Feb 11, 2016 7:41 pm

Re: inchidere fereastra

Mesajde Mister » Mar Oct 04, 2016 5:11 pm

nevvermind scrie:
Mister scrie:ok, mai am o singura intrebare, daca eu am o functie care face ceva, trebuie sa dea cineva reshresh ca sa se intampla functia, cum pot face sa se intampla functia fara sa fie siteul deschis?
Gen eu am aceasta functie counthonlinetime(); si vreau sa fie apelata din 10 in 10 secunde am pus in index asa counthonlinetime(); dar trebuie sa dea cineva reshresh sau sa stea pe site ca sa fie apelata


Runtime-ul JS-ului (chestia care executa codul JS), nu este executat in lipsa tab-ului/browser-ului. Inchizi tab-ul = se opreste executia. Server-side e simplu: faci un cron php. Pe partea de client-side nu poti fara artificii. Si nici nu-ti sugerez. Din cate observ, intinzi prea mult abilitatile browser-ului . Asta inseamna ca a) ori faci ceva super inovator (nu cred) sau b) design-ul aplicatiei tale ar trebui re-considerat. Adica: de ce cauti atat de mult sa-ti dai seama daca e logat sau nu? Care-i faza?


Am o simpla sesiune care nici nu se sterge nici nu se inchide, nu inteleg de ce ramana coloana "online" in tabel daca inchid browserul sau tabul.

am asa in pagini
login php

Cod: Selectaţi tot

$_SESSION['user'] = $row->ID;// coloana din baza de date dupa ce a pus corect username si parola
'UPDATE `'.Config::$accounttabel.'` SET `rpgon` = 1, loggedtime = current_timestamp WHERE `'.Config::$playeridvariable.'` = '.$_SESSION['user'].''// actualizez ca este online si ora la care a dat login
                  


logout php

Cod: Selectaţi tot



'UPDATE `'.Config::$accounttabel.'` SET `rpgon` = 0 WHERE `'.Config::$playeridvariable.'` = '.$_SESSION['user'].''
               
unset($_SESSION['user']);
session_destroy();



si mai am la index un while care verifica daca au trecut 30 secunde de la ultima logare pana in time() sa ii dea delogare dar rebuie cineva sa fie pe site

Cod: Selectaţi tot



   'SELECT * FROM `'.Config::$accounttabel.'` WHERE `rpgon` > 0'
   
   while
   {
      if(strtotime(date("Y-m-d H:i:s"))-strtotime($row->loggedtime)>30)
      {
      'UPDATE `'.Config::$accounttabel.'` SET `rpgon` = 0 WHERE `'.Config::$playeridvariable.'` = '.$row->ID.''   
      unset($_SESSION['user']);
      session_destroy();
   }
   }

vekand
Average Member
Mesaje: 83
Membru din: Dum Mai 03, 2015 9:15 am

Re: inchidere fereastra

Mesajde vekand » Mar Oct 04, 2016 6:51 pm

Nu prea am inteles cum e cu "trebuie cineva sa fie pe site". Daca asa e facut atunci nu cred ca e bine. Nu stiu unde ai pus functia ajax care apeleaza "index.php", ea trebuie pusa in pagina la care are acces orice user (probabil pagina principala) pentru ca este rulata automat cind se deschide pagina. Daca nici un user nu este logat de ce mai trebuie sa rulezi ajax? Sau vrei ca ajax sa ruleze doar cind e logat admin-ul? Nu inteleg.
Deci:
- faci o functie ajax (dupa modelul pe care ti l-am dat)
- functia o plasezi in <head> la pagina principala sau intr-un fisier extern fisier.js pe care il incluzi in paginile in care ai nevoie (<script src=''></script>)
- aceasta functie apeleaza un fisier.php de pe server care executa o secventa (alt fisier decit login.php sau logout.php)
- in functia ajax stabilesti intervalul (timeout()), care e bine sa fie cit mai mare ca sa nu suprasoliciti serverul (cel putin 1 minut, sau chiar mai mult)
- eventual rezultatul ajax il pui intr-un element din pagina si nu mai ai nevoie de refesh

Asta e tot. Ce nu e clar? Poate n-am inteles eu. Faci totul pe partea de server (mai putin apelul lui ajax) si nu-ti mai trebuie cron. Ajax-ul va rula indiferent cine deschide site-ul, iar daca nu e nici un user nu e nevoie sa ruleze. Si eu am aplicatii cu multi useri, dar nu este nevoie sa monitorizez care user este logat si care nu, oricum sesiunea (conexiunea) se inchide la inchiderea browserului, sau dupa un anumit interval de timp, depinde de setarile PHP.

Mister
Junior Member
Mesaje: 43
Membru din: Joi Feb 11, 2016 7:41 pm

Re: inchidere fereastra

Mesajde Mister » Mar Oct 04, 2016 10:13 pm

Asta e problema, eu nu am folosit ajax nu am ajax legat de sesiune pentru ca nu am stiut cum sa il folosesc,
Codul cu setarea 0 a coloanei rpg on este in index acolo si gen eu sunt in baza de date si rpgon este 1 pana intru pe index si cand intru pe index coloana rpgon se face 0

vekand
Average Member
Mesaje: 83
Membru din: Dum Mai 03, 2015 9:15 am

Re: inchidere fereastra

Mesajde vekand » Mie Oct 05, 2016 8:43 am

Decizia e a ta, tu stii ce ai acolo, dar parerea mea este asa cum a spus si nevvermind, nu cred ca ai nevoie de monitorizarea userilor daca sint logati sau nu. Metoda __destruct() (eliberarea din memorie a unui obiect) este apelata automat de PHP cind nu mai exista referinta catre obiectul respectiv, iar conexiunea este tot un obiect, deci in mod normal sesiunea se inchide automat la inchiderea browserului.

Mister
Junior Member
Mesaje: 43
Membru din: Joi Feb 11, 2016 7:41 pm

Re: inchidere fereastra

Mesajde Mister » Mie Oct 05, 2016 10:00 am

Vrei sa spui ca pot pune queryul de rpgon = 1 respectiv 0 aici?

Cod: Selectaţi tot

<?php
class Session
{
    protected $data = array();

    public function __construct()
    {
        // load session data from database or file
    }

    // get and set functions

    public function __destruct()
    {
        // store session data in database or file
    }
};


Înapoi la “PHP Incepători”

Cine este conectat

Utilizatori ce ce navighează pe acest forum: Niciun utilizator înregistrat și 84 vizitatori