SkyNet
(Skynet)
November 1, 2009, 5:28pm
1
Доброго времени суток!
в SWFUpload флеш-ролик запрашивает загружающий скрипт POSTом.
Естественно, сессия рвется.
Так как в проекте используется ajax, включена только CSFR Validation (без cookie validation)
соответсвенно, при запросе "/controller/uploadaction" возникает ошибка "The CSRF token could not be verified." до
инициализации контроллера
вопрос:
как можно восстановить сессию по какому либо ключу (phpsessionID?) до того, как идет проверка на сессию и csrf?
есть догадки, что имеет смысл хранить сессии в базе и поднимать ее по какому-нибудь $_POST[‘SESSION_ID’]
но на каком этапе работы Yii?
имхо проще передавать во флеху csrf ключ и вместе с пост запросом отправлть их приложению.
Zolter
(Zolter Od)
November 5, 2009, 11:08am
3
Как по мне то проще флеху не юзать. Не понимаю зачем она вам
Alecs
(Oleksiy74)
November 5, 2009, 1:07pm
4
Зачем вставать в позу ? Человек задал вопрос конкретный, дайте ответ если есть, форум имхо не для флуда.
Alecs
(Oleksiy74)
November 5, 2009, 1:10pm
5
с SWFUpload таже проблема (потеря сесии ) и с правами по Rbac проблемы. Пришлось в Rbac через if() отключить проверку прав при переходе на екшн upload . Екшн работает только на админке так это не критично (наверно ).
Zolter
(Zolter Od)
November 5, 2009, 1:44pm
6
Да просто как уже сказали token надо посылать в flash через xml к примеру.
А когда форма с flash-а будет посылать результат - прибавлять к нему переменную "YII_CSRF_TOKEN" в которую и пихать token полученный через xml.
Albert
(Testphptest)
November 6, 2009, 6:48am
7
Доброго времени суток!
в SWFUpload флеш-ролик запрашивает загружающий скрипт POSTом.
Естественно, сессия рвется.
Так как в проекте используется ajax, включена только CSFR Validation (без cookie validation)
соответсвенно, при запросе "/controller/uploadaction" возникает ошибка "The CSRF token could not be verified." до
инициализации контроллера
вопрос:
как можно восстановить сессию по какому либо ключу (phpsessionID?) до того, как идет проверка на сессию и csrf?
есть догадки, что имеет смысл хранить сессии в базе и поднимать ее по какому-нибудь $_POST[‘SESSION_ID’]
но на каком этапе работы Yii?
У меня похожая проблема была, только с 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',
),
yolf
(Yolf3d)
August 10, 2010, 9:52am
9
Albert:
У меня похожая проблема была, только с 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'];
}