Уникальный идентификатор в PHP против формы $ _POST - PullRequest
0 голосов
/ 24 августа 2010

Вот идея: пользователь переходит на страницу, где он может создать элемент ". На этой странице он может загружать файлы и до отправки формы (работает на Flash для пользователей с поддержкой Flash / Javascript и поддерживается чистый PHP + 5 файлов выводит + iframe для пользователей без Flash / Javascript). Он должен оставаться на той же странице.

Когда пользователь заходит на страницу, я использую этот фрагмент для создания длинного уникального идентификатора:
$random_id = hash('SHA512', (time() * microtime()) . mt_rand(1, 1000) . mt_rand(1, 1000) . uniqid((time() * microtime())));. Эта переменная хранится в сессии. В любом случае, мне нужно пересоздавать его каждый раз, когда пользователь заходит на эту страницу (потому что он может отменить добавление элемента на этот раз и принять решение о его добавлении через несколько минут). Я также храню его в скрытом вводе во внешнем интерфейсе (чтобы форма Flash / HTML отправляла эту переменную с массивом $_POST)

Когда пользователь загружает файл с помощью Flash / Javascript ИЛИ, когда он загружает файл с помощью PHP / iframe, я проверяю файлы, переименовываю и перемещаю их во временный каталог с временным именем ($randon_id).

При отправке формы я использую $random_id, чтобы найти загруженные файлы и добавить правильный идентификатор элемента в таблицу файлов.

Теперь я столкнулся с довольно большой проблемой. Конечно, я использую валидацию внешнего интерфейса (но это своего рода «игрушка», только для повышения удобства использования), поэтому мне нужно проверить форму с помощью PHP. Иногда случается, что пользователь предоставляет неверные данные (неправильный формат и т. Д.). Когда пользователь нажимает кнопку «Отправить», страница перезагружается. И теперь я пришел со своей проблемой:

При перезагрузке страницы $random_id изменяется по мере обновления. Таким образом, скрытый ввод в HTML-форме (опять же, он используется в Flash-форме и HTML-форме). Как этого избежать?

Чтобы уточнить: Нет , я не хочу блокировать свой веб-сайт для пользователей без Flash / Javascript. Доступность - это ключ для меня, этот веб-сайт должен работать для всех (с Javascript / Flash и без него и т. Д.).

PS. Я использую каркас KohanaPHP.

С уважением,
Top

1 Ответ

1 голос
/ 24 августа 2010

Если я вас правильно понимаю, просто не устанавливайте новое уникальное значение идентификатора в сеансе, если оно уже установлено. т.е. проверьте, существует ли он уже для сеанса, и используйте его, если это так. Тогда каждая страница, загруженная пользователем, будет иметь один и тот же идентификатор до истечения / окончания сеанса.

...