Добавление Same-сайта; Безопасно для файлов cookie в Classi c ASP - PullRequest
0 голосов
/ 01 апреля 2020

Мы работаем на классическом c ASP веб-сайте и имеем проблемы с файлами cookie в браузере Chrome. Chrome заставляет повара ie быть надежно установленным (https://www.chromestatus.com/feature/5633521622188032)

Мы настраиваем повара ie следующим образом:

Response.AddHeader "Set-Cookie", "TestCookie=This is a Test; path=/; SameSite=None; Secure" 
Response.Cookies("TestCookie").Expires = Date + 1

Однако это имеет проблемы с Chrome, когда сеансы внезапно заканчиваются при вызове ресурса из другого домена.

Chrome Повар ie Подробности показывают это:

Send for
Same-site connections only

Обратите внимание, что здесь нет упоминания о "безопасном", как мне кажется. Как правильно настроить Cook ie в classi c ASP для этого?

Ответы [ 2 ]

0 голосов
/ 05 апреля 2020

Стандартный метод Response.Cookies не работает надежно с файлами cookie, установленными с помощью более низкого уровня Reponse.Addheader. Я испытал то же самое.

Я не могу проверить, но вы можете попробовать две вещи:

  1. не используйте эти две инструкции в тот же кодовый блок ASP. Я предполагаю, что установка повара ie с использованием AddHeader() обойдет коллекцию классических c ASP cook ie. Поэтому Classi c ASP не будет знать, что этот повар ie был установлен. То, что вы можете попробовать, это установить этот повар ie на одной странице, отправить его в браузер, а на другую страницу установить срок действия.

  2. Попробуйте и установить срок действия с помощью той же инструкции AddHeader(). Вам нужно будет посмотреть, как это делается на уровне заголовка, но это, безусловно, должно быть возможно.

У меня есть несколько примеров кода в Интернете, который устанавливает безопасный и HTTPOnly Cook ie , используя Response.AddHeader(), но он не устанавливает срок действия, в результате чего готовится ie, срок действия которого истекает при закрытии браузера (вкладки):

https://gitlab.com/erik4/classic-asp-book-examples/-/blob/master/global.asa

0 голосов
/ 01 апреля 2020

Существует проблема с вашим текущим подходом к настройке Повара ответа ie.

Используя Response.Cookies после установки заголовка с помощью Set-Cookie вы фактически создаете новый пустой повар ie называется "TestCook ie". Вместо этого вы хотите включить срок действия в существующий заголовок Set-Cookie.

При тестировании кода это содержимое заголовка ответа:

Response Headers

<%
Function FormatCookieDateTime(interval, value, tz)
  Dim dt: dt = DateAdd(interval, Date(), value)
  Dim tm: tm = Time()
  Dim result: result = WeekDayName(WeekDay(dt), True) & ", " & _
    Right("00" & Day(dt), 2) & "-" & _
    MonthName(Month(dt), True) & "-" & _
    Year(dt) & " " & _
    Right("00" & Hour(Time()), 2) & ":" & _
    Right("00" & Minute(Time()), 2) & ":" & _
    Right("00" & Second(Time()), 2) & " " & tz

  FormatCookieDateTime = result
End Function

Response.AddHeader "Set-Cookie", "TestCookie=This is a Test; path=/; SameSite=None; Secure; expires=" & FormatCookieDateTime("d", 1, "GMT")
%>

Встроенная функция, упрощающая настройку срока действия с использованием правильного формата.

Помните Secure для безопасных соединений

Поскольку вы устанавливаете два файла cookie (один с помощью AddHeader() и один с помощью Response.Cookie) , возможно, неясно, но первый повар ie с установленным Secure будет игнорироваться chrome, если соединение не использует HTTPS. Фактически, если вы посмотрите на запрос в Chrome Dev Tools, вы должны увидеть предупреждающий символ рядом с заголовком Set-Cookie, который говорит (при наведении курсора) что-то вроде;

Этот set-cook ie имел атрибут "Безопасный", но не был получен по безопасному соединению.

...