![]() |
![]() |
![]()
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 |
|
|
![]() |
![]()
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:
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ę:
jeśli mysql zwróci pusty wynik to wiadomo, że tej sesji nie ma w bazie, wylogoujesz takiego usera (session_destroy() + header location). |
|
|
![]()
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 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 4.10.2025 - 07:54 |