1

Temat: usunięcie konta przez admina i aktywna sesja...

hej,

kolejny problem - zalozmy ze w serwisie mamy dwoch uzytkownikow: jankowalski i doda.

jankowalski jest adminem, doda jest standardowym uzytkownikiem, obydwoje sa zalogowani w tym samym czasie. jankowalski z panelu admina w aplikacji usuwa uzytkownika doda - jednak doda jest ciagle zalogowana i jej dane znajduja sie w sesji. jak automatycznie wylogowac dode po usunieciu tego uzytkownika? zakladam ze nie przechowuje sesji w bazie

2

Odp: usunięcie konta przez admina i aktywna sesja...

Możesz na przykład dla danego użytkownika zapisać jego aktualny session_id (np w tabeli users). Wtedy przy usuwaniu możesz spróbować usunąć sesję fizycznie z serwera niezależnie od sposobu trzymania sesji (baza - wiadomo, jeśli php/cake - pliki są nazywane po id sesji chyba).

Innym sposobem jest sprawdzanie za każdym razem, czy zalogowany user ma jeszcze aktywne konto w bazie. Ale to dodatkowe query przy każdym odświerzeniu, więc rozwiązanie niezalecane.

3

Odp: usunięcie konta przez admina i aktywna sesja...

hej,

jest z tym jeden maly problem:

* CakePHP session IDs are also regenerated between requests if
* 'Security.level' is set to 'high'

poradzilem sobie inaczej - postanowilem skorzystac z klasy Cache:

1) wrzucilem w core.php wlasny setup keszu:

Cache::config('cacheDeletedUsers', array('engine'=>'File', 'path' => CACHE, 'duration' => 1200));

jesli 'Security.level' jest ustawiony na 'high' sesja w aplikacji trwa 20 minut - stad wartosc 1200 dla swiezosci keszu...

2) w app_controller wrzucilem taka funkcje:

function _cacheDeletedUsers($ids = array()) { //$ids - tablica id-ków usuniętych użytkowników
        
        Configure::write('Cache.disable', false);
        
        $deleted_users = Cache::read('DeletedUsers');
        if (!$deleted_users) {
            //pusty cache
            Cache::write('DeletedUsers', $ids, array('config' => 'cacheDeletedUsers'));
        } else {
            //pełny cache
            $new_ids = array_merge($deleted_users, $ids);
            Cache::write('DeletedUsers', $new_ids, array('config' => 'cacheDeletedUsers'));
        }
    
    }

wywoluje ja tuz po pomyslnym usunieciu usera przez admina...

3) w app_controller w beforeFilter sprawdzam, czy zalogowany user nie jest przypadkiem na liscie usunietych:

        
        if ($this->Auth->user()) {
            
            Configure::write('Cache.disable', false);
            $deleted_users = Cache::read('DeletedUsers');
            if ($deleted_users && in_array($this->Auth->user('id'), $deleted_users)) {
                $this->redirect($this->Auth->logout());
            }
}

Co sadzicie o tym rozwiazaniu???