2013-01-02 80 views
5

在codeigniter登錄後,我將所有數據存儲到會話並重定向到論壇控制器。但是我在論壇控制器中失去了所有的價值。codeIgniter:登錄後丟失會話數據

當我嘗試從會話中減少一些值後,它完美地工作。

現在的問題是 - 爲什麼會這樣? codeIgniter中會存儲任何值的上限值嗎?

即使我嘗試搜索,我發現像

redirect('forum', 'refresh'); 

但它無法正常工作。而且我的項目已經開發了一半,所以我不能使用codeignter的「PHP Native Session class」。

+0

您可以使用本地會話類,它無縫集成。您可能必須向類的最大值添加一個方法。 (我至少) – jadkik94

+0

@ jadkik94:正如我已經提到,我不能使用本地會話類,因爲我已經開發了大部分模塊,並且不能去和改變每個文件。 –

+0

打開你的配置將會話保存到數據庫。感謝您的時間和精力,請參閱http://ellislab.com/codeigniter/user-guide/libraries/sessions.html – mallix

回答

1

說明: 默認笨存儲在cookie中,其具有的尺寸取決於瀏覽器2KB-4KB的上限的會話數據。 如果您嘗試在會話中存儲超過4KB的數據,您將開始遇到問題。

解決方案: 最簡單的辦法是到會話信息的過程存儲在DB.The CodeIgniter session documentation細節在DB.it的設置了一個表,並改變了幾個配置的問題存儲會話參數。下面是你需要做 - 以下變量

更新的配置文件(application /配置/ config.php文件)的變化:

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

創建新表用於存儲會話而

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`) 
); 

欲瞭解更多信息:http://goo.gl/YPllj0

7

默認情況下,CodeIgniter將會話數據存儲在cookie中,該cookie的大小上限爲4KB。如果您嘗試在會話中存儲超過4KB的數據,您將開始遇到問題。

最簡單的解決方案可能是將會話詳細信息存儲在數據庫中。 CodeIgniter session documentation詳細說明了將會話存儲在數據庫中的過程 - 這是設置表格和更改一些配置參數的問題。

+0

。 –

4

CI會話將所有內容都存儲在cookie中,並具有可選的加密功能。所以apparently有可能達到這個限度。這就是如果你存儲2K字節的東西;如果只是登錄信息,那應該不成問題。如果你確實使用了那麼大的東西,那麼我想你不應該這樣做。

無論如何,我不認爲這是問題,因爲我有類似的問題(我不記得這個的確切原因)。我找到的解決方案是使用本機PHP會話類,並添加一個方法:all_userdata或任何它被稱爲。這樣,一切就像正常會話一樣工作(不需要改變任何東西)。

+0

感謝您的時間和精力。 –

+0

@ jadkik94我知道你前一陣子做過這個,但在使用Native PHP Session類之前,你是否嘗試過使用CI會話數據庫表(接受的答案)?如果是這樣,你明白爲什麼它失敗了嗎?在我的情況下,它仍然會隨機丟失會話。你能描述你添加的all_userdata方法嗎? – Armfoot

+1

@Armfoot我不認爲我曾試過數據庫會話。 all_userdara方法剛剛返回'$ _SESSION'數組。無論如何,我認爲在CI 3.0中,他們修改了整個Session類。如果您使用的是最新版本,請參閱[這裏](http://www.codeigniter.com/user_guide/libraries/sessions.html#session-drivers)。 – jadkik94

0

在我的情況下,經過一些測試(HTTPS和HTTP在本地主機)後,錯誤來了這個問題,並沒有正確設置$ config ['cookie_s_s ecure'],所以你可以嘗試改變配置。php:

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

乾杯!

+1

謝謝! upvoted爲0 – Dug