Обновление

Обновление до версии 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
версия: 4.x