Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Jak wywalić usera z sesji z poziomu admina?
Forum PHP.pl > Forum > PHP
adamantd
Witam!
Chodzi mi o to, że jeżeli w swojej aplikacji jestem zalogowany jako administrator i chcę usunąć usera z jakichś powodów to wszystko jest ok do momentu kiedy nie trafię na takiego, który właśnie jest zalogowany... Jak sprawić, żeby go automatycznie wylogowało z sesji w momencie kiedy usunę jego konto?

Oczywiście nie chcę odwoływać się do bazy danych przy każdym requescie usera
Michael2318
Takie coś najlepiej jest robić za pomocą bazy danych. Przykładowo fora mają tabelę sessions, gdzie zapisywane są m.in. takie dane jak:
- IP obecnie przeglądających stronę,
- losowo wygenerowany ciąg znaków - unikalny dla każdej sesji,
- ID usera (jeśli niezalogowany to np. 0).

W tym momencie, przy logowaniu usera tworzysz mu sesję z poziomu PHP, np:
  1. $_SESSION['login'] = $user_id; // np. $_SESSION['login'] = 4;


Dodatkowo możesz wysłać do bazy - tabela np. sessions wartości:
- id usera 4,
- losowy ciąg znaków wygenerujesz sobie na podstawie np. microtime i dasz to w md5,
- IP no to wiadomo.

Teraz, nie sprawdzasz tylko czy $_SESSION jest większe od 0, ale odwolujesz się też do bazy, więc jesli chcesz usunąć usera to z bazy, z tabeli sessions wywalasz wpis, gdzie session_user_id = 4. Następnie, jesli ten delikwent odświeży stronę to do bazy standardowo pójdzie zapytanie sprawdzające jego sesję:

  1. SELECT * FROM `sessions` WHERE session_user_id = 4;


jeśli mysql zwróci pusty wynik to wiadomo, że tej sesji nie ma w bazie, wylogoujesz takiego usera (session_destroy() + header location).
adamantd
Problem rozwiązany

Podczas niektórych ważniejszych akcji updatowałem last_activ usera, przerobiłem to trochę i zamiast jednego zapytania wykonują się teraz dwa podczas takiego update`a, ponieważ teraz najpierw wykonuję select i sprawdzam czy w ogóle jest co update`ować. Jeśli nie ma takiego usera w bazie to wylogowuję go z sesji i header a dla ajaxów return false, żeby user nie mógł wykonać żadnej akcji tam gdzie nie jest przeładowywana strona (musiałem też wprowadzić kilka ifów) -teraz wszystko działa

p.s. -Michael2318 dzięki za podpowiedź, zrobiłem po swojemu ale schemat podobny

pozdrawiam
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.