2011-07-22 16 views
5

Podczas przechowywania sesji w bazie danych poprzezCodeIgniter limit rozmiaru sesja

$config['sess_use_database'] = TRUE; 

Czy rozmiar danych ograniczony do wielkości pola User_Data który to tekst ...? Nie 4kb jak normalny plik cookie.

+0

Nie wiem na pewno. Ale jeśli tak, to byłoby bardzo głupie. –

+0

Jeśli zapiszesz w bazie danych, dane rzeczywiście są ograniczone wielkością pola, w którym zapisujesz dane. Więc jeśli używasz "TEKSTU", powinieneś mieć dużo wolnego miejsca. –

+0

Jeśli spojrzysz na linię # 293 pliku session.php, nadal ustawia plik cookie. – ringerce

Odpowiedz

4

Aby dokładniej wyjaśnić powyższy komentarz, po wybraniu zapisu danych sesji w bazie danych, CodeIgniter nie ustawia pliku cookie (oczywiście innego niż identyfikator sesji), ale zapisuje wszystkie informacje, które ustawiłby w pliku cookie w bazie danych.

Jeśli spojrzeć na sess_write w klasie Session znajduje się w ./system/libraries/, jeśli umożliwiły korzystanie z bazy danych, zobaczysz że serializes dane używając serialize i zapisuje je bezpośrednio do bazy danych. Nie ma ograniczenia na długość nałożonego przez CodeIgniter podczas zapisywania do bazy danych.

Dla Twojej wygody, oto link do kodu źródłowego: https://bitbucket.org/ellislab/codeigniter/src/fe2247a927ab/system/libraries/Session.php#cl-252.

Jedyne ograniczenie jest ustalane przez pole, którego użyłeś do zapisania danych w bazie danych. Aby uzyskać więcej informacji na temat wymagań dotyczących przechowywania danych w MySQL, przeczytaj this.

+0

Tak więc sesja o wartości około 50 kB nie spowodowałaby problemów ze specyfikacją CI? Występują problemy, gdy moje dane sesji były wyprowadzane w programie profilującym, ale nie były dostępne w kontrolerze. Wyłączyłem tę bibliotekę sesji http://codeigniter.com/wiki/Session_Hybrid/, a problem został rozwiązany. – ringerce

+0

@ringerce - nie powinno być problemu. Sama sesja jest w istocie kolejną tablicą, która staje się serializowana i niezsrywalizowana podczas odczytu lub zapisywania (chyba że używasz plików cookie). Przechowuję obiekty [Doctrine] (http://www.doctrine-project.org/) w mojej sesji, które wydają się dość duże bez żadnych problemów. –

0

Myślę, że to odpowiedź na twoje pytanie. z kodu klasy:

// Are we saving custom data to the DB? If not, all we do is update the cookie 
if ($this->sess_use_database === FALSE) 
{ 
    $this->_set_cookie(); 
    return; 
} 

nawet komentarze pochodzą z samej klasy. więc aktualizuje plik cookie, jeśli nie korzysta z bazy danych.

1

znalazłem taką samą „wielkość graniczna” problem nawet mam ci_session tabelę do przechowywania

po prostu zmienić na typ danych user_data = longtext i mój problem rozwiązać

chociaż rozmiar sesji jest ograniczona do wielkości longtext NIE NIELIMITOWANY

Powiązane problemy