From 9ba4fd0d045be652141f3c2732102bf9601f9967 Mon Sep 17 00:00:00 2001 From: Vladimir Bondarevskiy Date: Tue, 26 Nov 2019 00:31:59 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A3=D1=87=D0=B8=D1=82=D1=8B=D0=B2=D0=B0?= =?UTF-8?q?=D1=82=D1=8C=20max-age=20=D0=B4=D0=BB=D1=8F=20cookies=20#24,=20?= =?UTF-8?q?=D0=94=D0=BB=D1=8F=20cookie=20=D0=B1=D0=B5=D0=B7=20=D0=BF=D1=83?= =?UTF-8?q?=D1=82=D0=B8=20=D0=BF=D1=80=D0=BE=D0=BF=D0=B8=D1=81=D1=8B=D0=B2?= =?UTF-8?q?=D0=B0=D1=82=D1=8C=20=D0=B7=D0=BD=D0=B0=D1=87=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D0=B5=20=D0=BF=D0=BE=20=D1=83=D0=BC=D0=BE=D0=BB=D1=87=D0=B0?= =?UTF-8?q?=D0=BD=D0=B8=D1=8E=20#22?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Ext/Module.bsl" | 52 +++++++++++++++---- 1 file changed, 43 insertions(+), 9 deletions(-) diff --git "a/src/CommonModules/\320\232\320\276\320\275\320\275\320\265\320\272\321\202\320\276\321\200HTTP/Ext/Module.bsl" "b/src/CommonModules/\320\232\320\276\320\275\320\275\320\265\320\272\321\202\320\276\321\200HTTP/Ext/Module.bsl" index a36d193..9d7536c 100644 --- "a/src/CommonModules/\320\232\320\276\320\275\320\275\320\265\320\272\321\202\320\276\321\200HTTP/Ext/Module.bsl" +++ "b/src/CommonModules/\320\232\320\276\320\275\320\275\320\265\320\272\321\202\320\276\321\200HTTP/Ext/Module.bsl" @@ -17,7 +17,7 @@ // // URL: https://github.com/vbondarevsky/Connector // e-mail: vbondarevsky@gmail.com -// Версия: 1.3.4 +// Версия: 1.3.5 // // Требования: платформа 1С версии 8.3.10 и выше @@ -925,6 +925,16 @@ КонецФункции +Процедура УдалитьCookieИзХранилища(ХранилищеCookies, Cookie) + + Если ХранилищеCookies.Получить(Cookie.Домен) <> Неопределено + И ХранилищеCookies[Cookie.Домен].Получить(Cookie.Путь) <> Неопределено + И ХранилищеCookies[Cookie.Домен][Cookie.Путь].Получить(Cookie.Наименование) <> Неопределено Тогда + ХранилищеCookies[Cookie.Домен][Cookie.Путь].Удалить(Cookie.Наименование); + КонецЕсли; + +КонецПроцедуры + Процедура ДобавитьCookieВХранилище(ХранилищеCookies, Cookie, Замещать = Ложь) Если ХранилищеCookies.Получить(Cookie.Домен) = Неопределено Тогда @@ -1390,12 +1400,18 @@ Функция ИзвлечьCookies(Заголовки, URL) + ТекущееВремя = ТекущаяУниверсальнаяДата(); Cookies = Новый Соответствие; Для Каждого ОчереднойЗаголовок Из Заголовки Цикл Если НРег(ОчереднойЗаголовок.Ключ) = "set-cookie" Тогда Для Каждого ЗаголовокCookie Из РазбитьНаОтдельныеЗаголовкиCookies(ОчереднойЗаголовок.Значение) Цикл - Cookie = РаспарситьCookie(ЗаголовокCookie, URL); - Если Cookie <> Неопределено Тогда + Cookie = РаспарситьCookie(ЗаголовокCookie, URL, ТекущееВремя); + Если Cookie = Неопределено Тогда + Продолжить; + КонецЕсли; + Если Cookie.СрокДействия <= ТекущееВремя Тогда + УдалитьCookieИзХранилища(Cookies, Cookie); + Иначе ДобавитьCookieВХранилище(Cookies, Cookie); КонецЕсли; КонецЦикла; @@ -1427,7 +1443,7 @@ ОтдельныйЗаголовок = ОтдельныйЗаголовок + ЗапчастиЗаголовков[Индекс]; КонецЕсли; КонецЦикла; - Заголовки.Добавить(ОтдельныйЗаголовок); + Заголовки.Добавить(ОтдельныйЗаголовок); Возврат Заголовки; @@ -1460,7 +1476,7 @@ КонецФункции -Функция РаспарситьCookie(Заголовок, URL) +Функция РаспарситьCookie(Заголовок, URL, ТекущееВремя) Cookie = Неопределено; Индекс = 0; @@ -1486,6 +1502,10 @@ Cookie.Путь = Значение; ИначеЕсли Ключ = "secure" Тогда Cookie.ТолькоБезопасноеСоединение = Истина; + ИначеЕсли Ключ = "max-age" Тогда + ОписаниеТипа = Новый ОписаниеТипов("Число"); + Секунды = ОписаниеТипа.ПривестиЗначение(Значение); + Cookie.СрокДействия = ТекущееВремя + Секунды; Иначе Продолжить; // INFO: другие параметры пока игнорируются КонецЕсли; @@ -1495,6 +1515,14 @@ Возврат Cookie; КонецЕсли; + ДозаполнитьCookieНеявнымиЗначениями(Cookie, URL); + + Возврат Cookie; + +КонецФункции + +Процедура ДозаполнитьCookieНеявнымиЗначениями(Cookie, URL) + СтруктураURL = КоннекторHTTP.РазобратьURL(URL); Если Не ЗначениеЗаполнено(Cookie.Домен) Тогда Cookie.Домен = СтруктураURL.Сервер; @@ -1502,10 +1530,16 @@ Если Не ЗначениеЗаполнено(Cookie.Порт) И ЗначениеЗаполнено(СтруктураURL.Порт) Тогда Cookie.Порт = СтруктураURL.Порт; КонецЕсли; - - Возврат Cookie; - -КонецФункции + Если Не ЗначениеЗаполнено(Cookie.Путь) Тогда + ПозицияПоследнегоСлеша = СтрНайти(СтруктураURL.Путь, "/", НаправлениеПоиска.СКонца); + Если ПозицияПоследнегоСлеша <= 1 Тогда + Cookie.Путь = "/"; + Иначе + Cookie.Путь = Лев(СтруктураURL.Путь, ПозицияПоследнегоСлеша - 1); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры Функция ПолучитьЗначениеЗаголовка(Заголовок, ВсеЗаголовки, Ключ = Неопределено)