2013-01-16 106 views
0

我在我的一个客户的网站上遇到了一个问题,它似乎正在交换两个用户的会话。我使用的笨并具有以下配置:Codeigniter会话在用户之间交换

$config['sess_cookie_name']  = 'ci_session'; 
$config['sess_expiration']  = 7200; 
$config['sess_expire_on_close'] = FALSE; 
$config['sess_encrypt_cookie'] = FALSE; 
$config['sess_use_database'] = TRUE; 
$config['sess_table_name']  = 'sessions'; 
$config['sess_match_ip']  = TRUE; 
$config['sess_match_useragent'] = TRUE; 
$config['sess_time_to_update'] = 300; 

昨天我面临着一个问题,即用户之一是其在每一页上他会重新生成。作为额外的预防措施,我在会话表中增加了User-Agent数据库字段的大小,并将match_ip切换为TRUE。

今天,似乎有两个用户正在登录,他们每个在标题中都有“欢迎X”消息作为其他人的名字。不幸的是,我只能从我的客户那里获得这些信息,所以我无法调试问题或将其复制到我的机器上,因为会话对我来说(本地和在线)似乎工作正常。

有没有人有任何建议或了解我如何进一步调试,了解我的情况,或者问题可能是什么?我试图加入:

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

在用户日志记录,但我不知道如果这可能是问题。

我当然也仔细检查了我的实际登录代码没有问题......但是,它只是从POST中检索电子邮件+密码并在数据库中找到匹配的记录,即通常的过程。

+0

任何特殊字符的用户名或通行证?它可以改变MySQL的SELECT结果。 – primetwig

+0

通常在电子邮件地址中找不到下划线和点(。)以外的用户名中没有特殊字符。我不确定密码,因为它在数据库中被加密。我想如果是这样的话,他们将无法登录,因为查询在数据库中找不到任何匹配的记录。 – PoloRM

回答

0

那么这是一个奇怪的问题,提出了一个更长的加密密钥,并加密你的cookies,看看他们是否有问题了。

这些是我在很多网站上使用的设置,并且没有遇到此问题(加密密钥,加密cookie并在接近时过期)。

$config['encryption_key'] = 'dkfhlgsugT&(657865876t0967(*)&^)(*&*(&$^&%#%^#_)(+JKBVKHJFDC^*%VR^[email protected]%C^'; 

$config['sess_cookie_name']  = 'ci_session'; 
$config['sess_expiration']  = 7200; 
$config['sess_expire_on_close'] = TRUE; 
$config['sess_encrypt_cookie'] = TRUE; 
$config['sess_use_database'] = TRUE; 
$config['sess_table_name']  = 'ci_sessions'; 
$config['sess_match_ip']  = TRUE; 
$config['sess_match_useragent'] = TRUE; 
$config['sess_time_to_update'] = 300; 

,并确保你破坏用户注销页面上的会话,并登录页面(如你所说):

$this->session->sess_destroy(); 
+0

我也使用了相当长的加密密钥。然而,我会在cookie上添加加密。 – PoloRM

+0

这可能是由两个用户使用同一台计算机造成的,当他们注销时,会话和Cookie不会被正确销毁。 –

+1

我不相信两个混淆了的用户使用同一台计算机,甚至根本不相关。我在等待客户的反馈,看看问题是否仍然显示。 – PoloRM