Я использую PHP версии 5.3.2 на локальном сервере разработки и на удаленном веб-сервере.
Я пытаюсь использовать uploadify для загрузки нескольких файлов на сервер. В получающем сценарии я хотел бы использовать данные, хранящиеся в сеансе, однако, поскольку uploadify отправляет файлы в сценарий с использованием Flash, он не отправляет cookie сеанса.
Обходной путь для этой проблемы состоит в том, чтобы загружать в GET или POST идентификатор сеанса к сценарию, однако я считаю это очень ненадежным.
В моем сценарии у меня есть следующее:
<?php
ini_set('session.use_only_cookies', FALSE);
ini_set('session.use_trans_sid', TRUE);
session_name('SESSNAME');
session_start();
print_r($_SESSION);
URL-адрес скрипта похож на script.php? SESSNAME = sessionid , и я попытался использовать прозрачные идентификаторы сеанса, как указано выше, а также вручную установить идентификатор с помощью session_id ($ _ GET ['SESSNAME']).
Этот всегда работает при непосредственном доступе к сценарию через браузер и отправке текущего идентификатора сеанса, даже если я вручную удаляю файл cookie сеанса. Это также всегда работает с uploadify на моем локальном сервере. Однако при использовании uploadify на удаленном сервере он работает примерно в 20% случаев совершенно случайно. Там нет шаблона. Казалось, он работал с большей частотой, когда я добавил
ini_set('session.gc_probability', 1);
ini_set('session.gc_divisor', 1);
к сценарию, однако это могло быть просто совпадением.
Есть идеи?
Информация о локальном сервере: hxxp: //www.dur.ac.uk/n.r.brook/info_local.php
Информация об удаленном сервере: hxxp: //www.dur.ac.uk/n.r.brook/info.php
(извините за hxxp, у вас нет прав на размещение нескольких ссылок!)
Некоторые предположения ...
Если немного покопаться и посмотреть на заголовки, которые получает скрипт, я думаю, что, возможно, решил проблему.
Вам необходимо отправить идентификатор сеанса при использовании uploadify, потому что flash не отправляет куки при использовании метода FileReference.upload () (я думаю!). Однако, как и идентификатор сеанса, в средах с балансировкой нагрузки (например, на удаленном сервере) есть также файл cookie BALANCEID, который определяет, с каким сервером в данный момент работает пользователь. Flash не отправляет этот файл cookie, поэтому балансировщик нагрузки иногда отправляет запрос на другой сервер, и на этом сервере сеанс не существует.
Я проверил это поведение, установив переменную сеанса после того, как напечатал сеанс. Эта проблема и повторная отправка файлов показывают проблему - сначала я получаю пустой массив, но несколько переменных в переменной начинают появляться.
Итак, если все вышеприведенное верно, то мой вопрос: что я могу сделать, чтобы заставить флэш-память отправлять эти данные с загрузкой, чтобы балансировщик нагрузки знал, какой сервер использовать? Или это безнадежное дело?
Ответ?
После дальнейших исследований я обнаружил следующий пост - hxxp: //swfupload.org/forum/generaldiscussion/977
Это говорит о том, что файлы cookie не могут быть отправлены с помощью FileReference.upload (), и поэтому uploadify не может использоваться с серверами с балансировкой нагрузки, если вы хотите использовать данные сеанса. Тем не менее, я думаю, что теперь я попытаюсь найти решение, которое сохранит данные, связанные с идентификатором сессии, в файл. Сценарий получения загрузки может открыть этот файл и извлечь необходимые данные.
Это мой первый опыт работы с чем-либо на основе Flash, но это не улучшило мое мнение о технологии!