2013-01-02 8 views
5

W codeigniter po zalogowaniu przechowuję wszystkie dane w sesji i przekierowuję do kontrolera forum. Ale tracę wszystkie wartości w kontrolerze forum.codeIgniter: utrata danych sesji po zalogowaniu

Kiedy próbuję po zmniejszeniu niektórych wartości z sesji działa idealnie.

Teraz moje pytanie brzmi: - dlaczego tak się dzieje? Czy istnieje górny limit wartości, które należy przechowywać w sesji w codeIgniter?

Nawet staram się szukać znalazłem jak

redirect('forum', 'refresh'); 

Ale to nie działa. Mój projekt jest w połowie rozwinięty, więc nie mogę użyć "PHP Native Session" klasy codeignter.

+0

Możesz użyć rodzimej klasy sesji, która integruje się bez żadnego efektu. Być może trzeba będzie dodać jedną metodę do maksimum klasy. (Zrobiłem co najmniej) – jadkik94

+0

@ jadkik94: jak już wspomniałem nie mogę używać natywnej klasy sesji, ponieważ już opracowałem większość modułów i nie mogę iść i zmieniać każdego pliku. –

+0

Włącz konfigurację, aby zapisać sesje w bazie danych. Zobacz http://ellislab.com/codeigniter/user-guide/libraries/sessions.html – mallix

Odpowiedz

1

Wyjaśnienie: Domyślnie sklepach CodeIgniter dane sesji w pliku cookie, który ma górny limit 2 KB-4KB wielkości w zależności od przeglądarki. Jeśli próbujesz przechowywać więcej niż 4KB danych w sesji, zaczniesz wyświetlać problemy.

Rozwiązanie: Najprostszym rozwiązaniem jest przechowywać dane sesji w DB.The CodeIgniter session documentation szczegółów procesu do przechowywania sesji w DB.it kwestia utworzenie tabeli i zmieniając parę config parametry. Poniżej są zmiany, które trzeba DO-

Aktualizacja poniżej zmiennej w pliku konfiguracyjnym (application/config/config.php):

$config['sess_use_database'] = TRUE; 
$config['sess_table_name'] = 'ci_sessions'; 

Created nowej tabeli do przechowywania Sesja-

CREATE TABLE IF NOT EXISTS `ci_sessions` (
session_id varchar(40) DEFAULT '0' NOT NULL, 
ip_address varchar(45) DEFAULT '0' NOT NULL, 
user_agent varchar(120) NOT NULL, 
last_activity int(10) unsigned DEFAULT 0 NOT NULL, 
user_data text NOT NULL, 
PRIMARY KEY (session_id), 
KEY `last_activity_idx` (`last_activity`) 
); 

Aby uzyskać więcej informacji: http://goo.gl/YPllj0

7

Domyślnie CodeIgniter przechowuje dane sesji w pliku cookie, którego górny limit wynosi 4KB. Jeśli próbujesz przechowywać więcej niż 4KB danych w sesji, zaczniesz wyświetlać problemy.

Najprostszym rozwiązaniem jest prawdopodobnie zapisanie szczegółów sesji w bazie danych. CodeIgniter session documentation szczegółowo opisuje proces przechowywania sesji w DB - jest to kwestia ustawienia tabeli i zmiany kilku parametrów konfiguracyjnych.

+0

dzięki za poświęcony czas i wysiłek. –

4

Sesja CI przechowuje wszystko w pliku cookie, z opcjonalnym szyfrowaniem. Tak więc apparently możliwe jest osiągnięcie tego limitu. To znaczy, jeśli przechowujesz coś w rodzaju 2K bajtów; jeśli są to tylko dane logowania, nie powinno to stanowić problemu. Jeśli użyjesz czegoś tak dużego, to myślę, że nie powinieneś.

W każdym razie nie sądzę, że to jest problem, ponieważ miałem podobny problem (nie pamiętam dokładnej przyczyny tego). Rozwiązaniem, które znalazłem, było użycie klasy sesji Native PHP Session i dodałem do niej jedną metodę: all_userdata lub jakkolwiek to się nazywało. Dzięki temu wszystko działało tak, jak w przypadku zwykłej sesji (nie trzeba niczego zmieniać).

+0

dzięki za poświęcony czas i wysiłek. –

+0

@ jadkik94 Wiem, że zrobiłeś to jakiś czas temu, ale zanim użyłeś Native PHP Session, czy próbowałeś użyć tabeli DB sesji CI (zaakceptowana odpowiedź)? Jeśli tak, czy rozumiesz, dlaczego się nie udało? W moim przypadku nadal losowo traci sesję. Czy możesz opisać metodę all_userdata, którą dodałeś? – Armfoot

+1

@Armfoot Nie sądzę, że próbowałem sesji bazy danych. Metoda all_userdara właśnie zwróciła tablicę '$ _SESSION'. W każdym razie myślę, że w CI 3.0 odnowili całą klasę sesji. Zobacz [tutaj] (http://www.codeigniter.com/user_guide/libraries/sessions.html#session-drivers), jeśli używasz najnowszej wersji. – jadkik94

0

W moim przypadku po niektórych testach (z https i http w localhost) pojawia się błąd dotyczący tego problemu i niepoprawne ustawienie $ config ['cookie_s ecure "], więc możesz spróbować zmienić konfigurację.php:

$config['cookie_secure'] = FALSE; // if is not under https, or true if you use https 

Pozdrawiam!

+1

thankyou !! zmieniono na 0 – Dug

Powiązane problemy