Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Jak wywalić usera z sesji z poziomu admina?
adamantd
post
Post #1





Grupa: Zarejestrowani
Postów: 228
Pomógł: 7
Dołączył: 15.08.2012
Skąd: Rzeszów

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
Michael2318
post
Post #2





Grupa: Zarejestrowani
Postów: 651
Pomógł: 116
Dołączył: 3.06.2012
Skąd: Lędziny

Ostrzeżenie: (0%)
-----


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).
Go to the top of the page
+Quote Post
adamantd
post
Post #3





Grupa: Zarejestrowani
Postów: 228
Pomógł: 7
Dołączył: 15.08.2012
Skąd: Rzeszów

Ostrzeżenie: (0%)
-----


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

Ten post edytował adamantd 10.03.2013, 14:46:53
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 4.10.2025 - 22:52