Symfony通过Session Id传递Sessin数据,Flash上传文件

最近在symfony框架下使用swfuploader上传文件,由于firefox的bug,flash不能正确的传递cookie,这样处理文件上传的action就不能正确的使用user数据,而在代码中通过session_id()和session_start()处理的session,由于user对象已经在这之前创建,所以通过user还是不能获取session信息,而且user还会将处理好的session清除,从而造成session的完全丢失,经过google,耗费偶近5个小时终于搞定:

通过继承 sfSessionStorage 生成新的 MySessionStorage class MySessionStorage extends sfSessionStorage { public function initialize($options) { //Shitty work-around for swfuploader if( isset($_POST["symfony"]) ) { session_id( $_POST["symfony"] ); } else if( isset($_GET["symfony"]) ) { session_id( $_GET["symfony"] ); } parent::initialize($options); } }并修改app的 factories.yml storage: class: MySessionStorage param: session_name: symfony 则可以通过 ?symfony=session_id 来找到session。

耗费如此多的时间,主要是因为偶的e文不好,而且开始想通过flash传递cookie实现,或者 提供php自动识别的 PHPSESSID 等来实现,均没有找到实现的方法,只好使用上面的方法了,主要不愿意重构symfony是因为偶对symfony还不够熟悉,如果那位朋友也在学习symfony可以一起学习。