9

Używam ionAuth & wydaje się wylogować mnie prawie losowo? Używam Codeigniter v2.1.4 - loguje się idealnie dobrze, ale jonAuth wydaje się wylogować losowo intevals, czy istnieje sposób, aby zmusić sesję do pozostania aktywnym, aż zadzwonię do funkcji ionAuth-> logout?IonAuth - wydaje się losowo wylogowywać mnie

Moja CI config wygląda następująco:

$config['sess_cookie_name']  = 'cisession'; 
$config['sess_expiration']  = 7200; 
$config['sess_expire_on_close'] = FALSE; 
$config['sess_encrypt_cookie'] = FALSE; 
$config['sess_use_database'] = TRUE; 
$config['sess_table_name']  = 'ci_sessions'; 
$config['sess_match_ip']  = FALSE; 
$config['sess_match_useragent'] = TRUE; 
$config['sess_time_to_update'] = 600; 

Moja ion_auth plik config wygląda następująco:

$config['user_expire'] = 0; 
$config['user_extend_on_login'] = FALSE; 

Czy ktoś może dać mi jakieś wskazówki na temat tego, co może być przyczyną problemu (s) ?

+0

robisz żadnych ajax żądania w dowolnym miejscu? są problemy z klasą sesji i warunkami wyścigu CIs, które nie zostały jeszcze w pełni rozwiązane. – jmadsen

+0

Używam zapytań ajaxowych - na stronie głównej znajduje się zapytanie ajax, które zasadniczo wykonuje żądanie GET w celu przeszukania tabeli bazy danych. – Zabs

Odpowiedz

15

Przyczyną problemu jest rotacja cookie sesji, gdy AJAX połączeń jest wykonywana, właściwa poprawka została uwzględniona w CodeIgniter 3

Masz cztery opcje:

Cope: I zmierzyłem się z tym problemem wcześniej, nie znając dokładnie jego przyczyny. W skrócie, zapisałem obietnicę każdego XMLHttpRequest, jeśli napotkano kod statusu 401 HTTP, aplikacja po stronie klienta zażądałaby poświadczeń w postaci wyskakującego okienka, a następnie ponowiła obietnicę AJAX.

po stronie klienta z jQuery, wystarczy dodać ten moduł obsługi ajaxError:

$(document).ajaxError(function (e, xhr, settings, exception) { 
    if (xhr.status == 401) 
    { 
     // open your popup 
     $('#login-popup').modal('open'); 

     // attach the xhr object to the listener 
     $(document).bind("retry-xhr", { 
       xhro: xhr 
      }, 
      function(event) { 
      // retry the xhr when fired 
      $.ajax(event.data.xhro); 
     }); 
    } 
}); 

i po zalogowaniu z powrotem, po prostu zadzwoń do tego, aby ponowić swoją prośbę:

$(document).trigger('retry-xhr'); 

stronie serwera, wystarczy tylko trzeba dodać, jeśli w swoim konstruktorze:

if (!$this->session->userdata('logged_in') && $this->input->is_ajax_request()) 
     { 
      $this->output->set_status_header('401'); 
      exit; 
     } 

To było przydatne, ponieważ niektórzy użytkownicy mogliby lea ve ich okno aplikacji internetowej otworzyło się na noc, a limit czasu sesji zostałby przekroczony. Następnie użytkownicy mogliby do mnie zadzwonić, że nie są w stanie wykonać żadnej funkcji AJAX, i musiałbym im powiedzieć, aby nacisnąć F5

ps. jeśli na kątowe, Użyłem HTTP Auth Interceptor Moduł powodzeniem

Hack: Zobacz ten post, a jego rozwiązanie jest stworzenie innego pola w tabeli ci_session i sprawdzić zarówno ciasteczek, więc sesja będzie nadal ważny po obrocie.

Wyjaśnia również szczegółowo, co jest przyczyną tej usterki

http://www.hiretheworld.com/blog/tech-blog/codeigniter-session-race-conditions

Upgrade: rozpocząć korzystanie z kolejną wersję, gdzie jest już naprawiono:

https://github.com/EllisLab/CodeIgniter/tree/release/3.0

poprawki Zamień linię 346 w systemie/biblioteki/sesja.php (funkcja sess_update())

if (($this->userdata['last_activity'] + $this->sess_time_to_update) >= $this->now) 

Z:

if (($this->userdata['last_activity'] + $this->sess_time_to_update) >= $this->now || $this->CI->input->is_ajax_request()) 
+0

Spróbuję tego - czy istnieje dobry przewodnik do aktualizacji z v2.1.4 do v3 codeigniter? Czy muszę zrobić wiele obejść dla mojej aplikacji v2, aby była kompatybilna z V3? – Zabs

+1

To zależy od tego, co robi twoja aplikacja, największą zmianą w mojej opinii jest to, że niektóre funkcje zwracają teraz wartość ** null ** zamiast ** false **. Jeśli od tego zależy logika Twojej aplikacji, będziesz się świetnie bawić z tymi nazwami funkcji. Uważam, że jest to najlepszy przewodnik do aktualizacji: [Upgrade to CI 3,00] (https://www.chuongduong.net/ci3/installation/upgrade_300.html) –

+0

dzięki temu - zamierzam to wypróbować wkrótce, ale tak czy inaczej da ci nagrodę za ilość użytecznych informacji, które podałeś - dziękuję jeszcze raz :) – Zabs

Powiązane problemy