-
Notifications
You must be signed in to change notification settings - Fork 209
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Учитывать max-age для cookies #24, Для cookie без пути прописывать зн…
…ачение по умолчанию #22
- Loading branch information
1 parent
c020b02
commit 9ba4fd0
Showing
1 changed file
with
43 additions
and
9 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -17,7 +17,7 @@ | |
// | ||
// URL: https://github.com/vbondarevsky/Connector | ||
// e-mail: [email protected] | ||
// Версия: 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,17 +1515,31 @@ | |
Возврат Cookie; | ||
КонецЕсли; | ||
|
||
ДозаполнитьCookieНеявнымиЗначениями(Cookie, URL); | ||
|
||
Возврат Cookie; | ||
|
||
КонецФункции | ||
|
||
Процедура ДозаполнитьCookieНеявнымиЗначениями(Cookie, URL) | ||
|
||
СтруктураURL = КоннекторHTTP.РазобратьURL(URL); | ||
Если Не ЗначениеЗаполнено(Cookie.Домен) Тогда | ||
Cookie.Домен = СтруктураURL.Сервер; | ||
КонецЕсли; | ||
Если Не ЗначениеЗаполнено(Cookie.Порт) И ЗначениеЗаполнено(СтруктураURL.Порт) Тогда | ||
Cookie.Порт = СтруктураURL.Порт; | ||
КонецЕсли; | ||
|
||
Возврат Cookie; | ||
|
||
КонецФункции | ||
Если Не ЗначениеЗаполнено(Cookie.Путь) Тогда | ||
ПозицияПоследнегоСлеша = СтрНайти(СтруктураURL.Путь, "/", НаправлениеПоиска.СКонца); | ||
Если ПозицияПоследнегоСлеша <= 1 Тогда | ||
Cookie.Путь = "/"; | ||
Иначе | ||
Cookie.Путь = Лев(СтруктураURL.Путь, ПозицияПоследнегоСлеша - 1); | ||
КонецЕсли; | ||
КонецЕсли; | ||
|
||
КонецПроцедуры | ||
|
||
Функция ПолучитьЗначениеЗаголовка(Заголовок, ВсеЗаголовки, Ключ = Неопределено) | ||
|
||
|