2010-12-12 10 views
6

Zajmuję się tworzeniem strony internetowej (z koszykiem) na górze Codeigniter i chcę użyć ustawienia sess_use_database, aby utrudnić użytkownikom włamywanie się do koszyka sesja.Codeigniter - jak uniknąć buforowania bazy danych dla sesji

ja również użyć buforowanie bazy danych w celu przyspieszenia wspólne wnioski dB (takich jak „dostać kategorię” jak większość zawartości DB nie będzie regularnie zmieniać), więc mam włączone to ustawienie:

$db['development']['cache_on'] = TRUE; 
//where 'development' is my environment 

w rezultacie jestem odkryciu, że zawartość sesja nie jest odświeżony, na przykład w sprawie tego wniosku:

$this->basket_contents = array_values($this->session->userdata('basket_contents')); 

również próbowałem to:

$this->db->cache_off(); 

... przed żądaniem sesji, ale nie rozwiązuje problemu (zakładam, ponieważ nie jest to bezpośrednie żądanie DB).

moich setings sesji są następujące:

$config['sess_cookie_name']  = 'str_session'; 
$config['sess_expiration']  = 7200; 
$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'] = 300; 

mogę zapobiec buforowanie związane sesyjnych-DB wniosków? Lub zapobiec buforowaniu niektórych tabel?

Czy istnieje inne (prawdopodobnie oczywiste) rozwiązanie, o którym nie myślałem?

Z góry dziękuję.

Odpowiedz

3

W buforowaniu CodeIgniter jest rozwiązaniem typu "wszystko albo nic", nie można go włączyć dla poszczególnych tabel.

Istnieją dwie opcje można myślę:

  • nie używają buforowania generycznych CI, ale korzystać z biblioteki podręcznej jak http://philsturgeon.co.uk/code/codeigniter-cache
  • technikę db_driver.php. W linii 265 (CI 1.7.2) sprawdza, czy włączono buforowanie. Zmień tę linię, aby nie działała, gdy jest to WYBIERZ w tabeli sesji.
+0

Świetnie, dzięki. Zacznę od pierwszej opcji. – Ade

1

W wersji do 2.2.1 nie może być proste rozwiązanie: linia

w system plików/bibliotek/Session.php

znalezisko z ciągiem „$ query = $ this-> CI-> db-> get ($ this-> sess_table_name); "

  1. przed umieścić linię:

    // saving cache_on 
    $cache_on = $this->CI->db->cache_on; 
    $this->CI->db->cache_on = false; 
    
  2. po umieścić linię:

    // restoring cache_on 
    $this->CI->db->cache_on = $cache_on; 
    

To zapobiega buforowanie mysql na dokładnym tego zapytania sesji, pozostawiając swoją logikę podręcznej tak jak jest.

Należy pamiętać, że ta edycja dotyczy pliku systemu ramowego, więc jeśli zaktualizujesz CI do wyższej wersji - ten hack zostanie utracony.