Ci框架下使用ploadify造成session丢失
- 格式:doc
- 大小:162.00 KB
- 文档页数:5
1 / 1
Ci框架下使用uploadify造成session丢失
在Codeigniter框架下使用uploadify上传文件时,有时会因
user-agent变化,带来貌似是session丢失的情况。例如上传
完文件后,莫名其妙的退出系统了,无法获取session_id了,
等等类似情况。
总 所周知,一般情况下,诸如uploadify,swfupload采用的都
是flash客户端,这样它们产生的useragent与用户使用浏览器
的 user-agent必然不同。所以,虽然用户登录了你的系统产生
了一个session,但是当触发上传程序时会产生另一个session
(在上述 useragent选项开启的情况下)。
所以,不是session丢失了,而是当你上传文件时,CI为
uploadify另外创建了一个session。因此就造成上述的情况了。
解决的方法有两个
方法一:
将$config['sess_match_useragent']设置成FALSE
原因是因为:CI默认的session采用的是cookie session,其
中在/application/config/config.php文件中
$config['sess_match_useragent'] = TRUE; 是需要你选择
是否匹配useragent。此时 将$config['sess_match_useragent']
设置成FALSE,重启服务器,刷新,上传时就不会重新验证
useragent了。但是为了安全起见,不建议使用方法一来一刀切
的解决问题。
1 / 1
方法二:
1:修改框架下/system/libraries/Session.php文件的
sess_read()方法
,
替换:
$session
=$this->CI->input->cookie($this->sess_cookie_na
me);
为:
if($this->CI->input->post('session_tmp'))
$session = str_replace(' ', '+',
$this->CI->input->post('session_tmp'));
else
$session =
$this->CI->input->cookie($this->sess_cookie_nam
e);
1 / 1
2:紧接着在后面添加如下一个判断
//是文件上传则不要验证useragent
if(stristr($this->CI->input->user_agent(),'shockwave'))
{
$this->sess_match_useragent = FALSE;
}
else
{
$this->sess_match_useragent = TRUE;
}
3.处理开启CSRF检测,但flash不能正确获取cookie导致的表
单验证错误 。
修改/system/core/Input.php 的_sanitize_globals()方法
1 / 1
将
if ($this->_enable_csrf == TRUE && !
$this->is_cli_request())
{
$this->security->csrf_verify();
}
改为
if ($this->_enable_csrf == TRUE
&& !stristr($this->user_agent(),'shockwave'))
{
$this->security->csrf_verify();
}
4.代码实例
1 / 1