| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > работа с HTTP сессией |
| Автор: Гость_Victor 20.5.2004, 13:45 |
| Всем доброго времени суток. Подскажите пожалуйста, могу ли я из моего ActiveX компонента подхватить сессию страницы где находится контрол, т.е. сессию между страницей и сервером(точнее ВЕБ сервисом) и работать с не й а не использовать InternetOpen? Если да, то подскажите как? Кстати, страница написана на ASP.NET. Заранее спасибо. |
| Автор: knave 20.5.2004, 14:46 |
| Думаю что нет, сессия то хранится на севере, а ActivX работает на клиенте и про сесии ничего незнет. Разве что ему можно в качестве параметров прописывать при генерации страницы нужные тебе данные, а потмо перед сабмитом через JS помещаеш данные в скрытые поля формы и все. Если что пиши, я такое уже делал. Либо опиши что зачем именно тебе нужна сессия/ |
| Автор: Гость_Victor 20.5.2004, 14:52 |
| Сессия ужна SOAP клиенту, который живёт в компоненте и юзает WinInet API для посылки реквеста. |
| Автор: DENNN 20.5.2004, 17:16 |
| О какой именно сессии идет речь? Если о сессии, используемой для хранения переменных, то думаю что можно, если вспомнить как же работает механизм сессий. А работает он так: При открытии сессии клиенту присваивается уникальный идентификатор сессии. При последующих коннектах необходимо лишь запросить этот идентификатор (внимание!) у клиента. Варинтов хранение этого идентификатора м.б. три: 1)Передача внутри урла в виде параметра. В php (и не только) уже встроен удобный механизм для "прозрачного" чтения этого идентификатора. Выглядит такая ссылка примерно так: http://www.mydomen.ru/nextpage.php?SID=834823867112123 2)Запись в кукисах. В этом случае от сервера приходит запрос, на значение некоторого параметра, который содержит в себе session ID 3)Хранение в теле HTML скрытого поля со значением идентификатора. Осталось только выяснить, какой способ используется в твоем случае. Если вопрос про TCP сессию, то тогда наверно все же легче открыть собственную сессию и через нее перекачать необходимые данные. |
| Автор: Гость_Victor 20.5.2004, 17:33 |
| Речь идёт о сессии, которую открывается между страницей и веб сервисом. Эту же сессию НЕОБХОДИМО использовать и в соаповском клиенте. Потому, что, в хедере соаповского запроса идёт токен, который сгенерён на базе сессии между страницей и сервисом. А на сервисе в каждом методе идёт расшифровка токена и получение сессии и дальнейшая её проверка. SID тут не подойдет, т.к. сервис написан на C# и смотрит переменную ASP.NET_SessionId где и прописан ID сессии. К томуже, по не понятным причинам, SOAP не дружит с методом GET. |
| Автор: Гость_Victor 20.5.2004, 17:44 |
| Проблема в том, что когда клиент соапа делает InternetOpen, то он автоматически генерит новую сессию, а мне этого не надо. Мне нужно использовать уже открытую сессию. |
| Автор: DENNN 20.5.2004, 18:43 | ||||
Вот и думай что все же под сессией понимать
Не слишком хорошо знаком с SOAP. Можно поподробнее что все же где генериться и о сервисе на чьей стороне идет речь? |
| Автор: Гость_Victor 21.5.2004, 10:09 |
| Делов том, что есть две страницы ASP.NET. Одна для логина, а вторая содержит мой контрол. Когда клиент выполняет логин, первая страница выполняет метод веб сервис Login на что ей приходит как результат структура, содержащая инфу о юзере, в том числе и токен, собраный на бызе идентификатора сессии между страницей логина и сервисом. Затем первая страница кидает структуру с инфой о юзере в сессию и делает редирект на вторую. Далее, вторая страница, содержащая мой контрол, вызывает метод контрола для инициализации. Мой контрол, должен, используя соап клиент, а он работает используя WinInet API, выполнить ещё один метод веб сервиса. Соап клиент посылает запрос на сервис путём HttpSendRequest и в заголовке, передаёт токен юзера зашедшего на сайт. Дело в том, что для того чтобы послать запрос, нужно открыть коннект(InternetOpen). СЕРВИС, получив запрос, пытается вытянуть из этой сессии структуру, содержащую инфу о юзере, для сравнения токенов. Естественно он ничего не получит, так как сессия новая, а инфа лежит в предыдущей сессии. Вот и получается, что чоап клиент не должен открывать новую сессию, а использовать предыдущую. Тока как это сделать???? Я уже просто в шоке. Спасибо за любые советы. |
| Автор: DENNN 21.5.2004, 11:21 |
| Извини чем-то конкренто помочь не смогу - не люблю ASP и не использую. Возникает вопрос, зачем все так сложно? Только для того, чтоб использовать сервис Login? Может проще подправить саму процедуру авторизации? |
| Автор: Гость_Victor 21.5.2004, 11:26 |
| Технологию я тоже не выбира, да и понять не могу, зачем им понадобился ActiveX. ASP.NET сам прекрасно работает со своим сервисом, технологии то одинаковые. В общем лажа. Если б была функция для получения хандлера текущей сессии, небылоб проблем. Спасибо что откликнулись. |