Установка переменных сеанса PHP с помощью Flash Actionscript - PullRequest
9 голосов
/ 17 июня 2009

У меня есть простой скрипт загрузки PHP, который вызывается из моего приложения Flash. Я уверен, что он делает вызов, потому что он действительно загружает файл!

session_start();

$default_path = 'files/';

$target_path = ($_POST['dir']) ? $_POST['dir'] : $default_path;

if(!file_exists($target_path)) mkdir($target_path, 0777, true);

$destination = $target_path . basename( $_FILES[ 'Filedata' ][ 'name' ] );

$file_name =  rand(1,9999).$_FILES[ 'Filedata' ][ 'name' ];

if(move_uploaded_file($_FILES[ 'Filedata' ][ 'tmp_name' ], $destination)){

$_SESSION['path'] = 'flashuploader_online/upload/'.$destination;

}

Однако я пытаюсь использовать переменную сеанса "путь" в другом скрипте, но она дает мне пустое значение! Да, я обязательно использовал session_start.

Я что-то упустил?

Обновление

По крайней мере, теперь я знаю, в чем проблема! Но я не уверен, как решить эту проблему, не беспорядочно передавая переменные сеанса. Есть идеи?

Ответы [ 2 ]

10 голосов
/ 18 июня 2009

Вам нужно будет сохранить session_id во всех запросах, передав его в качестве переменной. Я обещаю, что это не станет слишком грязным! Есть пара изменений, которые вам нужно будет сделать на странице, которая отображает флэш-память, а также скрипт, на котором она публикуется. Вам также нужно будет внести небольшие изменения в само приложение Flash, чтобы оно могло включать идентификатор сеанса при загрузке файла на сервер.

Во-первых, вы захотите предоставить flash с идентификатором сеанса, включив его в FlashVars. Вам понадобится страница, отображающая флэш-память, для предварительной обработки с помощью PHP, иначе не удастся сохранить сеанс. Убедитесь, что вы вызываете session_start () на странице, которая выводит Flash. Вы получите что-то вроде этого:

<object classid="clsid:(blah)" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,28,0" width="800" height="800" id="ZoomifyHotspotViewer">
  <param name="flashvars" value="phpsessionid=<? print session_id(); ?>">
  <param name="src" value="YourSWF.swf">
  <embed flashvars="phpsessionid=<? print session_id(); ?>" src="YourSWF.swf" pluginspage="http://www.adobe.com/go/getflashplayer" type="application/x-shockwave-flash" width="800" height="800" name="YourSWF"></embed>
</object>

В частности, эта часть должна быть добавлена ​​в тегах param и embed:

phpsessionid=<? print session_id(); ?>

Затем в приложении Flash, когда вы делаете запрос, у вас теперь будет доступ к идентификатору сеанса в переменной phpsessionid. Вам нужно включить значение в переменную POST с именем PHPSESSID (все заглавные буквы) - включите его, однако вы включаете другие переменные, такие как переменная 'dir', которую вы используете.

Включение этой переменной гарантирует, что при вызове session_start () на следующей странице сеанс будет восстановлен вместо запуска нового сеанса. Есть пара случаев конфигурации, когда это не происходит автоматически. Если это оказывается для вас случаем (то есть идентификатор сессии по-прежнему отличается на следующей странице), вам нужно сделать следующее на странице, которая обрабатывает загрузку:

session_id($_POST['PHPSESSID']);
session_start();

Это вручную заставит PHP обновить сохраненный сеанс с указанным идентификатором. Это даже не должно быть проблемой, с которой вам придется иметь дело, но если это так, вам, возможно, придется сделать что-то похожее на следующей странице, которую продолжает пользователь, или добавить общий случай ко всем страницам:

if (isset($_REQUEST['PHPSESSID'])) {
  session_id($_REQUEST['PHPSESSID']);
}
session_start();

Убедитесь, что если вам в конечном итоге понадобится вызывать session_id () таким образом как установщик, то вы должны сделать это до вызова session_start ().

0 голосов
/ 21 апреля 2011

Каждый раз, когда веб-сервер предоставляет вам ответ (страницу, изображение и т. Д.), Он имеет возможность отправить вашему браузеру файл cookie.

1) Каждый файл cookie отправляется только на тот же веб-сайт, с которого он был создан. 2) «Содержимое» куки (данные, которые он содержит) может состоять только из любой информации, которую веб-сервер уже знал.

Таким образом, ваш браузер автоматически отправляет файлы cookie в переменной «Cookie» в заголовке HTTP. Вы можете прочитать это с помощью следующей команды в PHP:

$headers = apache_request_headers();
echo $headers['Cookie'];

Сервер (если поддержка сеанса включена в конфигурации PHP) автоматически создает PHPSESSID (вы можете изменить имя переменной в конфигурации) в файле cookie, и вы можете получить к нему доступ непосредственно с помощью приведенного выше сценария (вам необходимо проанализировать $ headers, чтобы получить переменную PHPSESSID или любой другой файл cookie). Я думаю, что нет необходимости использовать flashvars, ваш браузер автоматически добавляет переменную Cookie в заголовок HTTP.

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...