2012-04-10 129 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为我工作。