Обновление
**********
Обновление до версии 3.4
========================
Минимально требуемая версия PHP - 8.3.
- метод `Request::isSameSite()` объявлен устаревшим в пользу `isFrom()`, который определяет источник запроса по заголовкам `Sec-Fetch-*`. Автоматическая защита форм и сигналов становится точнее, и одно поведение меняется: прямой переход (закладка, вручную введённый адрес, ссылка в письме) больше не считается same-site. Если сигнал полагается на ссылки-действия в письмах, пометьте его атрибутом `#[Requires(sameOrigin: false)]`.
- cookie `_nss` теперь отправляется только браузерам, которые не отправляют заголовок `Sec-Fetch-Site`
- `setCookie()` отправляет атрибут `Max-Age` и принудительно ставит флаг `Secure` для `SameSite=None` и для секционированных cookie
- перечисление `SameSite` заменяет константы `IResponse::SameSiteLax` и им подобные, которые объявлены устаревшими
- срок действия везде истолковывается одинаково: число - это относительное количество секунд, строка - интервал или дата. Передача абсолютной временной метки UNIX объявлена устаревшей, а сессионную cookie обозначает `null` вместо `0`.
- устаревший метод `Request::getRemoteHost()` возвращает `null`
- давно устаревший класс `Nette\Http\UserStorage` был удалён
Вся история перехода на заголовки `Sec-Fetch-*` рассказана в статье [Четверть века CSRF |https://blog.nette.org/en/quarter-century-of-csrf].
Обновление до версии 3.2
========================
- учётные данные из HTTP Basic Authentication больше не входят в объект `Url`, поэтому `$url->getUser()` и `$url->getPassword()` возвращают пустую строку. Считывайте их новым методом `$request->getBasicCredentials()`.
Причины этого изменения объясняются в статье [Nette Http 3.2: изменение доступа к учётным данным |https://blog.nette.org/en/nette-http-3-2-change-access-to-credentials].
Обновление до версии 3.1
========================
- cookie отправляются с флагом `sameSite: Lax`
- `cookieSecure` теперь по умолчанию равен 'auto'
- параметр `session.cookieSecure` объявлен устаревшим, вместо него используется `http.cookieSecure`
- cookie `nette-samesite` переименована в `_nss`
- `Nette\Http\Request::getFile()` принимает массив ключей и возвращает `FileUpload|null`
- `Nette\Http\Session::getCookieParameters()` объявлен устаревшим
- `Nette\Http\FileUpload::getName()` переименован в `getUntrustedName()`
- `Nette\Http\Url`: `getBasePath()`, `getBaseUrl()` и `getRelativeUrl()` объявлены устаревшими (эти методы входят в `UrlScript`)
- `Nette\Http\Response::$cookieHttpOnly` объявлен устаревшим
- `Nette\Http\FileUpload::getImageSize()` возвращает пару `[width, height]`
- при `autoStart: smart` (по умолчанию) сессия больше не запускается сразу после старта приложения только потому, что браузер отправил сессионную cookie; она запускается при первом чтении или записи. Добавлены значения `always` и `never`.
- когда браузер отправляет ID сессии, для которого сессии не существует, Nette удаляет cookie вместо создания новой сессии
- для доступа к секциям сессии предпочитайте методы `set()`, `get()` и `remove()`; в отличие от обращения через свойства они правильно различают чтение и запись и не запускают сессию без надобности
- значения по умолчанию для `cookiePath` и `cookieDomain` можно задать в конфигурации
Поведение сессий подробно описано в статье [Nette Http 3.1: намного умнее сессии |https://blog.nette.org/en/nette-http-3-1-much-smarter-sessions].
Обновление до версии 3.0
========================
- объект `Nette\Http\UrlScript` (который возвращает, например, `Nette\Http\Request::getUrl()`) теперь неизменяем
- в `new Nette\Http\Url('abcd')` строка `abcd` представляет путь, а не домен; начиная с 3.0 `(new Nette\Http\Url('abcd'))->setScheme('http')` правильно порождает `http:abcd` вместо прежнего `http://abcd`
Обновление
Обновление до версии 3.4
Минимально требуемая версия PHP – 8.3.
- метод
Request::isSameSite() объявлен устаревшим в пользу isFrom(),
который определяет источник запроса по заголовкам Sec-Fetch-*.
Автоматическая защита форм и сигналов становится точнее, и одно
поведение меняется: прямой переход (закладка, вручную введённый адрес,
ссылка в письме) больше не считается same-site. Если сигнал полагается на
ссылки-действия в письмах, пометьте его атрибутом
#[Requires(sameOrigin: false)].
- cookie
_nss теперь отправляется только браузерам, которые не
отправляют заголовок Sec-Fetch-Site
setCookie() отправляет атрибут Max-Age и принудительно ставит
флаг Secure для SameSite=None и для секционированных cookie
- перечисление
SameSite заменяет константы IResponse::SameSiteLax и им
подобные, которые объявлены устаревшими
- срок действия везде истолковывается одинаково: число – это
относительное количество секунд, строка – интервал или дата. Передача
абсолютной временной метки UNIX объявлена устаревшей, а сессионную cookie
обозначает
null вместо 0.
- устаревший метод
Request::getRemoteHost() возвращает null
- давно устаревший класс
Nette\Http\UserStorage был удалён
Вся история перехода на заголовки Sec-Fetch-* рассказана в статье Четверть века CSRF.
Обновление до версии 3.2
- учётные данные из HTTP Basic Authentication больше не входят в объект
Url,
поэтому $url->getUser() и $url->getPassword() возвращают пустую
строку. Считывайте их новым методом $request->getBasicCredentials().
Причины этого изменения объясняются в статье Nette Http 3.2: изменение доступа к
учётным данным.
Обновление до версии 3.1
- cookie отправляются с флагом
sameSite: Lax
cookieSecure теперь по умолчанию равен ‘auto’
- параметр
session.cookieSecure объявлен устаревшим, вместо него
используется http.cookieSecure
- cookie
nette-samesite переименована в _nss
Nette\Http\Request::getFile() принимает массив ключей и
возвращает FileUpload|null
Nette\Http\Session::getCookieParameters() объявлен устаревшим
Nette\Http\FileUpload::getName() переименован в getUntrustedName()
Nette\Http\Url: getBasePath(), getBaseUrl() и getRelativeUrl()
объявлены устаревшими (эти методы входят в UrlScript)
Nette\Http\Response::$cookieHttpOnly объявлен устаревшим
Nette\Http\FileUpload::getImageSize() возвращает пару [width, height]
- при
autoStart: smart (по умолчанию) сессия больше не запускается
сразу после старта приложения только потому, что браузер отправил
сессионную cookie; она запускается при первом чтении или записи.
Добавлены значения always и never.
- когда браузер отправляет ID сессии, для которого сессии не
существует, Nette удаляет cookie вместо создания новой сессии
- для доступа к секциям сессии предпочитайте методы
set(),
get() и remove(); в отличие от обращения через свойства они
правильно различают чтение и запись и не запускают сессию без
надобности
- значения по умолчанию для
cookiePath и cookieDomain можно задать
в конфигурации
Поведение сессий подробно описано в статье Nette Http 3.1: намного умнее
сессии.
Обновление до версии 3.0
- объект
Nette\Http\UrlScript (который возвращает, например,
Nette\Http\Request::getUrl()) теперь неизменяем
- в
new Nette\Http\Url('abcd') строка abcd представляет путь, а не
домен; начиная с 3.0 (new Nette\Http\Url('abcd'))->setScheme('http') правильно
порождает http:abcd вместо прежнего http://abcd