0

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

出于某种原因,当用户浏览站点时,会话会被混淆并冒充另一个随机用户。

我只是简单地做:

$this->session->set_userdata('logged_in', TRUE);  
$this->session->set_userdata('id', $account->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?

4

2 回答 2

1

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

如果不存在 `ci_sessions` 则创建表(
    session_id varchar(40) DEFAULT '0' NOT NULL,
    ip_address varchar(45) DEFAULT '0' NOT NULL,
    user_agent varchar(120) 非空,
    last_activity int(10) 无符号 DEFAULT 0 NOT NULL,
    user_data 文本不为空,
    主键(session_id),
    KEY `last_activity_idx` (`last_activity`)
);
于 2013-06-14T14:22:23.473 回答
0

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

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

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

于 2012-07-29T19:21:06.893 回答