Обнуление сессии в http клиенте



  • Здравствуйте! Уже перепробовал всё. В общем запустил обработку списка в цикл. Каждый элемент списка должен быть обработан через http-клиент и передан на сервер. Сервер принимает первый POST запрос, но второй пишет что "Доступ запрещён, истёк период сессии". В обычном браузере достаточно перегрузить страницу, чтобы сессия обновилась, в HTTP клиенте это не работает, то есть сколько не загружай заново url - идентификатор сессии не меняется. Уже что только не делал, и ставил "HTTP-клиент Сброс" перед загрузкой url, и подсовывал пустые куки, чистил заголовки - ничего не работает. Кстати "HTTP-клиент Сброс" и обнуление куки помогает только сбросить авторизацию перед вторым POST-запросом, но после авторизации Сервер всё равно пишет, что "истёк период сессии". Единственное, что работает - это после удачного выполнения первого POST-запроса - это принудительно ставить "Success" и запускать поток заново.

    Сервер как-то видит, что POST отправляется в текущем потоке, как ему сообщить, что это новые данные, как обнулить сессию полностью?



  • @profitget Ваш ip то не меняется... возможно сервер использует какие то скрипты, которые выполняются в браузере, а в HTTP клиенте надо их вручную выполнять.



  • @uraabk , да это понятно, но при первом запросе скрипты ведь тоже не исполняются, и сервер запрос принимает. А второй и последующие бракует. Как сделать чистый запрос в текущем потоке, чтобы сервер думал что это первый запрос?



  • @profitget Сброс клиента 100% все скидывает. Ищите причину в другом



  • @usertrue , видимо нет, 100% сброс получается, если завершить поток с помощью "Success", и запускать потоки заново. Всё же что-то передает HTTP клиент из текущего потока и сервер это палит.



  • @profitget Нет! xD На да ладно, можете так дальше думать )



  • @usertrue , ну я ему точно никакой информации о текущей сессии не сообщаю, старые куки не подставляю, заголовки очищаю, сброс делаю, но всё же инфа что я отправляю все в текущем потоке у Сервера имеется... То есть, если выставить количество удачных выполнений 10, то в связке с "Success" всё уходит. Но те же 10 выполнений в цикле - обработает только первое, остальные 9 - это все "текущаяя сессия". Сервер работает так, что каждый новый запрос должен осуществляться в новой сессии, но новую сессию через HTTP клиент можно получить только перезапуском потока...



  • @profitget Блин ну значит как-то криво очищаете. Http клиент ничего лишнего не делает. Сам он только подхватывает и запоминает куки. Все же видно, что он отсылает. Я уже второй год считай только запросах и пишу и как бы знаю о чем говорю. Мне не верите, посмотрите в снифер БАС, если ему не верите, включите другой снифер, fiddler например или http debugger



  • @usertrue , хотите прикол, если сохранить текущие куки в глобальную переменную и затем в следующем потоке загрузить перед загрузкой url, то всё отправляется !!!! Как?

    То есть не требуется заново логиниться, сервер видит что что я уже осуществил вход, но при этом он видит что я работаю в новом потоке )))



  • @profitget Глобальные переменные для того и нужны, что бы передавать данные между потоками.



  • @root said in Обнуление сессии в http клиенте:

    @profitget Глобальные переменные для того и нужны, что бы передавать данные между потоками.

    Да ты не понял. Сервак узнает, что у него БАС в новом потоке и дает добро спамить ))



  • @usertrue , и я о том... Как сервак узнает, что BAS в новом потоке? )))



  • @profitget said in Обнуление сессии в http клиенте:

    Как сервак узнает, что BAS в новом потоке?

    @profitget said in Обнуление сессии в http клиенте:

    если сохранить текущие куки в глобальную переменную и затем в следующем потоке загрузить перед загрузкой url,

    Нет? Вы же ему сами отправляете, а сессию он завершает бо не верит вам. Наверное там ua другой или еще чего. А он помнит кому и что он давал.



  • @tts9 , сессию он завершает потому что так и положено, а не потому что мне не верит, это сделано для того чтобы юзеры в обычном браузере 10 раз не кликали на кнопку "Отправить" и не запостили 10 раз одно и тоже... В обычном браузере для обновления сессии нужно обновить страницу, а для HTTP-клиента получается нужно создавать поток заново?

    Ну круто же ведь, теперь приведётся весь скрипт переписывать ))))



  • @profitget А зачем? что мешает
    Используйте действие 'HTTP-Клиент Загрузить cookies' с пустым значением, если вы хотите сбросить только файлы cookies.
    Это действие влияет на состояние http клиента и все настройки, такие как: прокси, заголовки, текст последнего ответа от сервера, статус ответа, cookies и т. д.

    Success Это и есть сброс. Вы похоже не сбрасываете а чистите заголовки. А cookies так не убрать. Это особенность, сделано с одной стороны верно, для удобства он их сам с собой тащит, но убрать их можно только пустым значением или сброс, а сброс это перезапуск потока как и success.
    upd клиент не браузер и ничего кроме заголовков и cookies он не передает у него просто нет инструментария для всяких local storage



  • @tts9 . сбрасывал (с пустым значением), не помогает... Но уже проблема решена, переписал скрипт под перезапуск потоков... XD


Log in to reply