SWFUpload и CSRF Validation

Доброго времени суток!

в SWFUpload флеш-ролик запрашивает загружающий скрипт POSTом.

Естественно, сессия рвется.

Так как в проекте используется ajax, включена только CSFR Validation (без cookie validation)

соответсвенно, при запросе "/controller/uploadaction" возникает ошибка "The CSRF token could not be verified." до

инициализации контроллера

вопрос:

как можно восстановить сессию по какому либо ключу (phpsessionID?) до того, как идет проверка на сессию и csrf?

есть догадки, что имеет смысл хранить сессии в базе и поднимать ее по какому-нибудь $_POST[‘SESSION_ID’]

но на каком этапе работы Yii?

имхо проще передавать во флеху csrf ключ и вместе с пост запросом отправлть их приложению.

Как по мне то проще флеху не юзать. Не понимаю зачем она вам

Зачем вставать в позу ? Человек задал вопрос конкретный, дайте ответ если есть, форум имхо не для флуда.

с SWFUpload таже проблема (потеря сесии ) и с правами по Rbac проблемы. Пришлось в Rbac через if() отключить проверку прав при переходе на екшн upload . Екшн работает только на админке так это не критично (наверно :( ).

Да просто как уже сказали token надо посылать в flash через xml к примеру.

А когда форма с flash-а будет посылать результат - прибавлять к нему переменную "YII_CSRF_TOKEN" в которую и пихать token полученный через xml.

У меня похожая проблема была, только с uloadify. В корне всего - невозможность восстановить сессию, т.к. нету кукисов. Выход - заставить SWFUpload посылать PHPSESSID в пост-параметре (думаю SWFUpload тоже это умеет) потом добавить и сконфигурировать компонент session в конфиге main.php таким образом, чтобы сессия брала идентификатор из $_POST[‘PHPSESSID’], когда он есть, а не из $_COOKIE[‘PHPSESSID’]


	// application components

	'components'=>array(

                'session'=>array(

			'class'=>'CHttpSession',

			'useTransparentSessionID'   =>($_POST['PHPSESSID']) ? true : false,

                        'cookieMode'                =>($_POST['PHPSESSID']) ? 'none' : 'allow',

                ),

светлая голова !

Аналогичная проблема, но ваш подход решил только часть проблемы - передачу id сессии, но не CSRF.

Пришлось в виджете дописывать:




$this->settings['scriptData'] = array(

        'PHPSESSID' => Yii::app()->session->getSessionId(),

        'YII_CSRF_TOKEN' => Yii::app()->request->csrfToken,

);



и в index.php:




if(isset($_POST['YII_CSRF_TOKEN']) && !empty($_POST['YII_CSRF_TOKEN']))

{

    $_COOKIE['YII_CSRF_TOKEN'] = $_POST['YII_CSRF_TOKEN'];

}