2012-04-10 131 views
2

我正在使用codeigniter。會議中我有一個奇怪的問題。我在用戶登錄時設置會話並將其重定向到新頁面。我觀察到會話有時會設置,有時它們沒有設置。我已嘗試使用codeigniter會話&本機會話與sess_use_database變量TRUE和FALSE。我不知道發生了什麼。Codeigniter會話問題

這是配置文件的樣子:

$config['sess_expiration']  = 7200; 
$config['sess_expire_on_close'] = FALSE; 
$config['sess_encrypt_cookie'] = TRUE; 
$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'] = 7200; 
+0

你注意到每種類型的會話有哪些行爲?你的session time_out設置爲什麼?這很模糊。 – Rooster 2012-04-10 23:38:48

+0

我很抱歉。這是配置文件看起來像$ config ['sess_expiration'] \t \t = 7200; $ config ['sess_expire_on_close'] \t = FALSE; $ config ['sess_encrypt_cookie'] \t = TRUE; $ config ['sess_use_database'] \t = TRUE; $ config ['sess_table_name'] \t \t ='ci_sessions'; $ config ['sess_match_ip'] \t \t = FALSE; $ config ['sess_match_useragent'] \t = TRUE; $ config ['sess_time_to_update'] \t = 7200; – Nikhil 2012-04-10 23:40:37

+0

和你創建了數據庫中的表按照說明使用數據庫與會話在ci? – Rooster 2012-04-10 23:43:01

回答

0

哪裏是你的sess_cookie設置?我沒有看到它?

$config['sess_cookie_name']  = 'cookiename'; 
$config['sess_expiration']  = 7200; 
$config['sess_expire_on_close'] = FALSE; 
$config['sess_encrypt_cookie'] = TRUE; 
$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'] = 7200; 

確保您選擇的任何cookie名稱都沒有下劃線。即:

$config['sess_cookie_name'] = 'mycookie'; // good 
$config['sess_cookie_name'] = 'my_cookie'; // bad 
+0

這是它如何$ config ['sess_cookie_name'] ='sitename'; – Nikhil 2012-04-11 00:08:47

+0

可以請你發佈你的整個控制器方法,登錄和重定向功能等 – Laurence 2012-04-11 01:35:38

2

當會話數據在數據庫中可用時,每次在用戶的cookie中找到有效會話時,都會執行數據庫查詢以與其匹配。如果會話ID不匹配,則會話被破壞。會話ID永遠不會更新,它們只能在創建新會話時生成。

爲了存儲會話,你必須先創建一個數據庫表用於此目的。

在你的數據庫中創建它:

CREATE TABLE IF NOT EXISTS `ci_sessions` (
    session_id varchar(40) DEFAULT '0' NOT NULL, 
    ip_address varchar(16) 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`) 
); 

時,有在配置和和變化:

$config['sess_use_database'] = TRUE; 

我更喜歡保存會話數據庫,因爲它是更安全,沒有問題的作品。

0

有同樣的問題,我發現它有

$config['sess_encrypt_cookie'] = TRUE; 
    $config['sess_use_database'] = TRUE; 

將插入2條記錄會話表中,與數據的第一條記錄,並沒有因此會話數據不可訪問的第二個記錄。當您更改

$config['sess_encrypt_cookie'] = FALSE; 

假只會插入一條記錄到會話表中的所有數據和所有將是正確的與世界:)

0

我認爲它只是沒有得到像預想的那樣更新並在每個頁面請求上創建一個新的。 (普通笨的設置問題)

這裏是我的建議:

仔細檢查您的application/config/config.php文件,以確保會議域的部分看起來像,如果你的主機網站上的主目錄:

$config['cookie_prefix'] = ""; 
$config['cookie_domain'] = "yourdomain.com"; 
$config['cookie_path'] = "var/sessions/"; 
$config['cookie_secure'] = FALSE; 

和喜歡,如果你主辦的網站上的一個子目錄:

$config['cookie_prefix'] = ""; 
$config['cookie_domain'] = "yourdomain.com"; 
$config['cookie_path'] = "siteSubDirectory/var/sessions/"; 
$config['cookie_secure'] = FALSE; 

並確保2個目錄可通過修改其權限爲755左右來寫入,我強烈建議您啓用數據庫會話,這樣會更安全,並通過檢查會話表來幫助您找出真正的問題。好運:)

0

嘗試$config['sess_match_useragent'] = FALSE;

我在與會話和重定向的同樣的問題,我已經竊取了我的CMS,找出是什麼導致了這一點。設置在config.php爲我工作。