Management utilizatori online si Deconectare utilizator
-
- Mesaje:117
Management utilizatori online si Deconectare utilizator
Salut, cum as putea face sa vad toate sesiunile utilizatorilor si daca doresc, mai apoi sa pot sterge o anumita sesiune? Exemplu: intra pe cont iar apoi il deconectez.
MarPlo
Mesaje:4343
Trebuie sa faci un script special pentru management-ul sesiunilor de logare.
1. In primul rand, la fiecare logare preiei si inregistrezi intr-un tabel din baza de date id-ul sesiunii ( session_id() ) asociat la id-ul acelui user.
- Tabel: loged_session
- In php:
2. La fiecare accesare de pagina, inainte de alte prelucrari, se verifica daca session_id() al utilizatorului corespunde cu valoarea din baza de date.
- Daca a selectat, definesti sesiune cu id-ul utilizatorului, in $_SESSION.
- Daca nu a selectat, stergi sesiunea cu id-ul lui, din $_SESSION..
3. Apoi iti faci un script prin care sa citesti/afisezi randurile cu id-urile din tabelul cu id_session (loged_session); si prin care sa poti sterge ce vrei. Sau folosesti PhpMyAdmin.
- Odata ce un id_session e sters din tabel, cand un utilizatorul acceseaza o pagina, scriptul care verifica daca session_id() e in baza de date va returna ca nu e, si ii va sterge cu unset() sesiunile lui de logare.
1. In primul rand, la fiecare logare preiei si inregistrezi intr-un tabel din baza de date id-ul sesiunii ( session_id() ) asociat la id-ul acelui user.
- Tabel: loged_session
Cod: Selectaţi tot
id_user | id_session | time_reg
// id_user: INT PRIMARY_KEY UNIQUE
// id_session: VARCHAR(255)
// time_reg: INT
Cod: Selectaţi tot
//cand formularul cu date pt. logare e trimis
//se verifica daca datele trimise (email, parola) sunt corecte.
//daca sunt corecte, se inregistreaza session_id()
$id_session = session_id();
$time = time();
$sql ="INSERT INTO loged_session (id_user, id_session, time_reg) VALUES ($id_user, '$id_session', $time)
ON DUPLICATE KEY UPDATE id_session='$id_session', time_reg=$time";
//executa $sql
Cod: Selectaţi tot
$id_session = session_id();
$sql ="SELECT id_user, time_reg FROM loged_session WHERE id_session='$id_session' LIMIT 1";
//executa $sql, verifica daca a selectat un rand
- Daca nu a selectat, stergi sesiunea cu id-ul lui, din $_SESSION..
3. Apoi iti faci un script prin care sa citesti/afisezi randurile cu id-urile din tabelul cu id_session (loged_session); si prin care sa poti sterge ce vrei. Sau folosesti PhpMyAdmin.
- Odata ce un id_session e sters din tabel, cand un utilizatorul acceseaza o pagina, scriptul care verifica daca session_id() e in baza de date va returna ca nu e, si ii va sterge cu unset() sesiunile lui de logare.
Stefan
Mesaje:117
Îți mulțumesc mult, am reușit, dar mai am o nelămurire: cum aș putea șterge rândurile cu sesiunile utilizatorilor care nu mai sunt online din baza de date la un anumit interval de timp fară să îi deconecteze și pe cei care sunt conectati?
MarPlo
Mesaje:4343
Ca sa stii cand utilizatorul e sau nu online; necesita o functie ajax in toate paginile care sa fie apelata automat cam o data pe minut (aici 50 secunde).
Acel ajax apeleaza un script php care sterge randurile din tabelul 'loged_session' unde coloana 'time_reg' are timestamp mai vechi de 65 secunde.
Apoi face update la acel id_session ca sa actualizeze time_reg sa nu fie sters cat e online.
Cod: Selectaţi tot
setInterval('functieAjax()', 50*1000);
Apoi face update la acel id_session ca sa actualizeze time_reg sa nu fie sters cat e online.
Cod: Selectaţi tot
$time = time();
$id_session = session_id();
//delete randuri mai vechi de 65 secunde
$sql ="DELETE FROM loged_session WHERE time_reg<".($time-65);
//executa $sql
//actualizeaza time_reg la utilizatorul curent
$sql ="UPDATE loged_session SET time_reg=$time WHERE id_session='$id_session'";
//executa $sql
Stefan
Mesaje:117
Am reușit și asta, îți mulțumesc foarte mult!