inchidere fereastra
Moderatori: Moderatori, Start Moderator
Re: inchidere fereastra
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.
Re: inchidere fereastra
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.
Re: inchidere fereastra
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
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
Re: inchidere fereastra
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.
Delogarea (in baza de date) se poate face numai cu ajax, n-ai alta cale.
Re: inchidere fereastra
am rezolvatsa zic asa, am folosit tot variabile si m-am folosit de timp
peste 900 secunde da delogare dar mai am o singura problema trebuie sa dau refresh ca sa vad ca e delogat
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
Re: inchidere fereastra
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.
Re: inchidere fereastra
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
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
Re: inchidere fereastra
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.
Re: inchidere fereastra
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
-
- Senior Member
- Mesaje: 1264
- Membru din: Mar Iun 22, 2010 3:17 pm
Re: inchidere fereastra
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/
Re: inchidere fereastra
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();
}
}
Re: inchidere fereastra
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.
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.
Re: inchidere fereastra
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
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
Re: inchidere fereastra
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.
Re: inchidere fereastra
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
}
};
Cine este conectat
Utilizatori ce ce navighează pe acest forum: Niciun utilizator înregistrat și 84 vizitatori