Юзер не инициализируется при сабмите формы

Юзаю на странице "uploadify" (флешевый загрузчик файлов), но столкнулся с проблемой - в экшене, который обслуживает запросы от загрузчика


var_export(Yii::app()->user->isGuest); 

// возвращает true, 

если заходить просто на страницу гет-ом, то все ок, юзер авторизирован

думал может куки не прилетают, так нет, кука одна и та же

array ( ‘PHPSESSID’ => ‘i1to5vrc20qop92nbj0phb4dr3’, )

почему может не инициализироваться объект пользователя? ковырять исходники сегодня уже не буду.

вот еще дамп переменной $_SERVER в момент загрузки




array ( 

'REDIRECT_STATUS' => '200',

'HTTP_ACCEPT' => 'text/*',

'CONTENT_TYPE' => 'multipart/form-data; boundary=----------ei4Ij5ei4cH2gL6cH2cH2cH2GI3Ij5',

'HTTP_USER_AGENT' => 'Shockwave Flash',

'HTTP_HOST' => 'test.loc',

'CONTENT_LENGTH' => '1532857',

'HTTP_CONNECTION' => 'Keep-Alive',

'HTTP_CACHE_CONTROL' => 'no-cache',

'HTTP_COOKIE' => 'PHPSESSID=i1to5vrc20qop92nbj0phb4dr3',

'SERVER_SOFTWARE' => 'Apache/2.2.11 (Win32) PHP/5.2.9-2',

'SERVER_NAME' => 'test.loc',

'SERVER_ADDR' => '127.0.0.1',

'SERVER_PORT' => '80',

'REMOTE_ADDR' => '127.0.0.1',

'DOCUMENT_ROOT' => 'D:/inetpub/test',

'SERVER_ADMIN' => 'admin@localhost',

'SCRIPT_FILENAME' => 'D:/inetpub/test/index.php',

'REMOTE_PORT' => '27069',

'REDIRECT_URL' => '/album/upload',

'GATEWAY_INTERFACE' => 'CGI/1.1',

'SERVER_PROTOCOL' => 'HTTP/1.1',

'REQUEST_METHOD' => 'POST',

'QUERY_STRING' => '',

'REQUEST_URI' => '/album/upload',

'SCRIPT_NAME' => '/index.php',

'PHP_SELF' => '/index.php',

'REQUEST_TIME' => 1295227514,

)

Инициализация загрузчика на странице.


<script type="text/javascript">

$(function() {

  $('#file_upload').uploadify({

    'uploader'  : '/assets/fa3bcd75/swf/uploadify.swf',

    'script'    : '/album/upload',

    'cancelImg' : '/assets/fa3bcd75/img/cancel.png',

   	'expressInstall': '/assets/fa3bcd75/swf/expressInstall.swf',

    'auto'      : false,

    'fileDataName': 'UserPhotos',

    'fileExt'     : '*.jpg;*.jpeg;*.gif;*.png',

    'fileDesc'    : 'Image Files',

    'folder'	:	'/tt',

    'multi'	  : true,

    'onComplete':function(event, ID, fileObj, response, data) {

        console.log(response);

        }

    });

});

</script>

При этом файл корректно загружается, но невозможно установить какой юзер его загрузил. Костыли городить не хочется из передачи дополнительных параметров как то хэш, идентифицирующий пользователя…

а как ты кукисы передал через флешку? :blink:

насколько я знаю, флеш не может передать куки в принципе.

Флешку писал не я, так что как и чего - не знаю … навешиваю на onComplete эвент который логирует то, что вернулось из скрипта экшена, а в скрипте - print_r($_COOKIES); Флешка работает в связке с jQuery плагином, js то точно имеет доступ к кукисам, возможно он передает их флешу, честно признаться с флешем очень мало работал, даже не в курсе.

мистика

попробуй поставить какой-нибудь анализатор трафика типа HttpAnalizer и проверить

никаких кукисов в запросе от флешки не будет

советую воспользоваться вот этим способом

http://www.yiiframework.com/forum/index.php?/topic/5362-swfupload-и-csrf-validation/page__view__findpost__p__28077

как выяснилось, flash передает cookie в мозилле

а опере и хроме, например, нет

Спасибо за помощь, действительно идентичная проблема, сейчас будем разбирать!

какая версия php?

сегодня встраивал Uploadify в проект на php5.3 и столкнулся с такой же проблемой

приведенный способ, который я применял на php5.2, не сработал

пока не понял почему

на этот раз использовал другой хак:

  1. заставил Uploadify передавать идентификатор сессии и CSRF-токен через POST параметр

'scriptData'=>array(

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

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

),

  1. добавил в начало index.php:

if(isset($_POST['PHPSESSID']))

	session_id($_POST['PHPSESSID']);

(для php5.2 вроде не работает <_<)

  1. для CSRF валидации добавил следующй код в index.php:

if(isset($_POST['YII_CSRF_TOKEN']))

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