|
本帖最后由 pipidoudou 于 2014-12-2 13:42 编辑
是专门为移动端定制的页面,有一个登录页面,登录成功后跳转支付,支付完成再跳转回来。使用CI自带的session保存登录状态和一些用户信息。但现在发现经常有些用户登录完了还是重新回到登录页面,或者完成第三方付款操作后callback返回回来,登录信息又丢失了。
不是必现,但每天都有一些。日志中会出现这样的错误:
ERROR - 2014-09-11 16:25:12 --> The session cookie data did not match what was expected. This could be a possible hacking attempt.
对应的业务日志类似这样:
2014-09-01 13:10:40|||INDEX|60.55.40.75|||||unknown|Mozilla/5.0 (iPhone; CPU iPhone OS 7_1_2 like Mac OS X) App
leWebKit/537.51.2 (KHTML, like Gecko) Mobile/11D257 QQ/5.0.0.165
2014-09-01 13:12:04|||LOGIN|60.55.40.75|||||unknown|Mozilla/5.0 (iPhone; CPU iPhone OS 7_1_2 like Mac OS X) App
leWebKit/537.51.2 (KHTML, like Gecko) Mobile/11D257 QQ/5.0.0.165
2014-09-01 13:12:04|159xxxxxxxx|李x|LOGIN_SUCCESS|60.55.40.75|||||unknown|Mozilla/5.0 (iPhone; CPU iPhone OS 7
_1_2 like Mac OS X) AppleWebKit/537.51.2 (KHTML, like Gecko) Mobile/11D257 QQ/5.0.0.165
2014-09-01 13:12:04|||LOGIN|60.55.40.75|||||unknown|Mozilla/5.0 (iPhone; CPU iPhone OS 7_1_2 like Mac OS X) App
leWebKit/537.51.2 (KHTML, like Gecko) Mobile/11D257 QQ/5.0.0.165
想请教一下,到底有哪些原因会造成这种现象?我一直都没有复现出来,不知道咋解决。看其他帖子的问题我这边都没有对应的问题,包括配置、域名特殊字符等。域名就是裸ip加port。
普通用户使用浏览器也不会去修改cookie设置,而且大多数浏览器已经没有禁用cookie的选项了。
出问题的UA列举:
Mozilla/5.0 (Linux; U; Android 4.2.1; zh-cn; HUAWEI G610-U00 Build/HuaweiG610-U00) UC AppleWebKit/534.31 (KHTML, like Gecko) Mobile Safari/534.31
Mozilla/5.0 (iPhone; CPU iPhone OS 7_1_2 like Mac OS X) AppleWebKit/537.51.2 (KHTML, like Gecko) Mobile/11D257 QQ/5.0.0.165
Mozilla/5.0 (Linux; U; Android 4.1.1; zh-cn; vivo X1 Build/JRO03C) AppleWebKit/533.1 (KHTML, like Gecko)Version/4.0 MQQBrowser/5.3 Mobile Safari/533.1 MicroMessenger/5.4.0.50_r797544.480 NetType/WIFI
config配置部分:
$config['sess_cookie_name'] = 'abc_session';
$config['sess_expiration'] = 3600*24*30*3;
$config['sess_expire_on_close'] = FALSE;
$config['sess_encrypt_cookie'] = FALSE;
$config['sess_use_database'] = TRUE;
$config['sess_table_name'] = 'abcsessions';
$config['sess_match_ip'] = FALSE;
$config['sess_match_useragent'] = FALSE;
$config['sess_time_to_update'] = 300;
session保存数据库,但是发现里面都没有上述出问题的那些UA信息!
login中的部分代码:
$this->session->set_userdata('is_login',true);
$this->session->set_userdata('user_id',$user->id);
$this->session->set_userdata('phone',$user->phone);
$this->session->set_userdata('name',$user->name);
log("LOGIN_SUCCESS");
redirect("action/gopay");
log是打印日志的函数,里面也是通过session获取用户信息打印出来。
$ua = $_SERVER["HTTP_USER_AGENT"];
$ip = $ci->input->ip_address();
$phone = $ci->session->userdata('phone')?$ci->session->userdata('phone'):"";
$name = $ci->session->userdata('name')?$ci->session->userdata('name'):"";
gopay是跳转到付款页面。里面首先判断登录状态,如果未登录,会跳转到登录页面。
if(!$this->session->userdata('is_login')){}
|
|