|
今天在做CI的项目里某个模块时,涉及到了activex插件。
此插件自己模拟了个post发到了服务端。
结果每次只要一发,session就清零了。
追踪了一下代码发现是sess_match_useragent引起了。原因是CI读了一下发过来的cookie里session的useragent信息和本次post请求里的useragent做了一下对比,如果不同则destory掉了session,所以导致session丢失。具体源码如下:
PHP复制代码 if ($this->sess_match_useragent == TRUE AND trim($session['user_agent']) != trim(substr($this->CI->input->user_agent(), 0, 120)))
{
$this->sess_destroy();
return FALSE;
} 复制代码
因为activex本身已经打包,且也不是自己写的,因此改的可能性不是很大,决定改一下CI。但是又不想整体放弃掉sess_match_useragent这个安全特性。因此打算就是和activex交互的Controller里动态取消掉sess_match_useragent的验证。
具体代码如下:
PHP复制代码
$CI =& get_instance();
$CI->config->set_item('sess_match_useragent', false);
$this->load->library('session');
复制代码
这样的话就动态取消了本次请求的sess_match_useragent
|
|