Codeigniter正在搞乱会话

时间:2012-07-29 16:50:27

标签: codeigniter session

我在Codeigniter上编写了一个简单的身份验证过程,但是存在问题。

出于某种原因,当用户正在浏览网站时,会话会混淆并冒充其他随机用户。

我只是这样做:

$this->session->set_userdata('logged_in', TRUE);  
$this->session->set_userdata('id', $account->id);

我通过登录用户的ID $logged_id = $this->session->userdata('id');

我在ci_sessions表上将数据库存储在数据库上 并且配置文件包含默认值:

$config['sess_cookie_name']     = 'ci_session';  
$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']  = 300;

什么可能弄乱会话并从中获取不同的ID?

2 个答案:

答案 0 :(得分:1)

迟到的答案,但对某人可能有用。我曾经遇到过这个问题,那是因为User-Agent的列太小了(然后,字符串被截断,CodeIgniter正在重新创建会话ID,认为客户端不同)。确保使用CI上提到的架构表。

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

答案 1 :(得分:0)

这听起来很奇怪。您的代码和配置似乎没问题。 请检查用户登录时是否正确销毁/ init会话:

$this->CI->session->sess_destroy();
$this->CI->session->sess_create();

然后看看你的MySQL ci_sessions表并尝试调试显示当前用户的'session_id'的问题..这是正确的吗? 如果您不解决,请发布您正在使用的更多代码。