我在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?
答案 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'的问题..这是正确的吗? 如果您不解决,请发布您正在使用的更多代码。