![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Jul 2010
Сообщений: 24
|
Приветствую всех.
Ситуация такова: Есть клиент-серверная игрушка, на сервере - PHP. Логика обмена данными между ними такая: Клиент отправляет запрос, к которому дописывается еще один параметр - сигнатура запроса, sign (md5-хэш запроса). На сервере выбираются все параметры, кроме sign, вычисляется их md5-хэш и сравнивается с параметром sign, пришедший с клиента. Если идентичны - все гуд, работаем, а если нет - отсылаем. И вот тут появляется проблема: на Флаше, при добавлении параметров к запросу через URLVariables, они почему-то случайным образом сортируются. А их md5 хэш вычисляется по строке параметров, которая была образована до разбивания ее в объект URLVariables. Поясню. Например, у меня есть вот такой запрос: commandID=loadData&userId=" + Main.userId + "&mode=" + Main.userMode Код отправки запроса: /** * Метод выполняет отправку запроса на сервер. * @param _query Строка запроса. * @param _completeEventHandler Обработчик события успешного выполнения запроса. * @param _ioErrorEventHandler Обработчик события появления ошибки при выполнении запроса. */ public static function sendQuery(_query:String, _completeEventHandler:Function = null, _ioErrorEventHandler:Function = null):void { var urlLoader:URLLoader = new URLLoader(); var variables:URLVariables = new URLVariables(); var request:URLRequest = new URLRequest(sScriptURL); var paramPairs:Array = _query.split(/[&=]/); for(var i:int = 0; i < paramPairs.length; i += 2) { variables[paramPairs[i]] = paramPairs[i + 1]; } if(bUseSignature) { variables["sign"] = MD5.encrypt(_query); } request.data = variables; request.method = URLRequestMethod.POST; if(_completeEventHandler != null) { urlLoader.addEventListener(Event.COMPLETE, _completeEventHandler, false, 0, true); urlLoader.addEventListener(Event.COMPLETE, onPHPResponse, false, 0, true); } if(_ioErrorEventHandler != null) { urlLoader.addEventListener(IOErrorEvent.IO_ERROR, _ioErrorEventHandler, false, 0, true); urlLoader.addEventListener(IOErrorEvent.IO_ERROR, onPHPResponseError, false, 0, true); } urlLoader.dataFormat = URLLoaderDataFormat.TEXT; urlLoader.load(request); }
Отсюда вопрос - как от этой произвольной сортировки в объектах избавиться? Заранее спасибо за ответы ![]() |
|
|||||
|
__________________
http://www.chessmax.ru |
|
|||||
|
Регистрация: Jul 2010
Сообщений: 24
|
А что там сортировать то? Это не массив ведь, а объект.
На клиенте, по крайней мере. Последний раз редактировалось CaribbeanLegend; 23.09.2011 в 12:41. |
|
|||||
|
Ну так кто вам мешает из объекта массив сделать?
var sorted: Array = []; for(var i:int = 0; i < paramPairs.length; i += 2) { variables[paramPairs[i]] = paramPairs[i + 1]; sorted.push(paramPairs[i] + "=" + paramPairs[i + 1]); } sorted.sort(); var signature: String = ''; for (key in sorted) { signature += sorted[key]; } signature = MD5.encrypt(signature);
__________________
http://www.chessmax.ru |
|
|||||
|
Регистрация: Jul 2010
Сообщений: 24
|
Да, помогло. Мерси
![]() |
|
|||||
|
Неначем)
__________________
http://www.chessmax.ru |
![]() |
![]() |
Часовой пояс GMT +4, время: 02:03. |
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | |
| Опции просмотра | |
|
|