Management utilizatori online si Deconectare utilizator

Discutii despre script-uri si coduri PHP-MySQL, precum si lucru cu XML in PHP.
Stefan
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

Cod: Selectaţi tot

id_user | id_session | time_reg

// id_user: INT PRIMARY_KEY UNIQUE
// id_session: VARCHAR(255)
// time_reg: INT
- In php:

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
2. La fiecare accesare de pagina, inainte de alte prelucrari, se verifica daca session_id() al utilizatorului corespunde cu valoarea din baza de date.

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 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.

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

Cod: Selectaţi tot

setInterval('functieAjax()', 50*1000);
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

$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!