Aktualizacja
************
Aktualizacja do wersji 3.4
==========================
Minimalna wymagana wersja PHP to 8.3.
- metoda `Request::isSameSite()` jest przestarzała na rzecz `isFrom()`, która ustala pochodzenie żądania z nagłówków `Sec-Fetch-*`. Automatyczna ochrona formularzy i sygnałów staje się precyzyjniejsza, a jedno zachowanie się zmienia: bezpośrednie wejście (zakładka, ręcznie wpisany adres, odnośnik w e-mailu) nie jest już uznawane za same-site. Jeśli sygnał opiera się na odnośnikach akcji w e-mailach, oznacz go `#[Requires(sameOrigin: false)]`.
- cookie `_nss` jest teraz wysyłane tylko do przeglądarek, które nie wysyłają nagłówka `Sec-Fetch-Site`
- `setCookie()` wysyła atrybut `Max-Age` i wymusza flagę `Secure` dla `SameSite=None` oraz dla cookies partycjonowanych
- enum `SameSite` zastępuje stałe `IResponse::SameSiteLax` itd., które są przestarzałe
- wygaśnięcie interpretowane jest wszędzie tak samo: liczba to względna liczba sekund, ciąg to interwał albo data. Przekazywanie absolutnego uniksowego timestampu jest przestarzałe, a cookie sesyjne reprezentuje `null` zamiast `0`.
- przestarzała metoda `Request::getRemoteHost()` zwraca `null`
- dawno przestarzała klasa `Nette\Http\UserStorage` została usunięta
Całą historię przejścia na nagłówki `Sec-Fetch-*` opowiada artykuł [Ćwierć wieku CSRF |https://blog.nette.org/en/quarter-century-of-csrf].
Aktualizacja do wersji 3.2
==========================
- dane uwierzytelniające z HTTP Basic Authentication nie są już częścią obiektu `Url`, więc `$url->getUser()` i `$url->getPassword()` zwracają pusty ciąg. Odczytasz je nową metodą `$request->getBasicCredentials()`.
Powody tej zmiany wyjaśnia artykuł [Nette Http 3.2: zmiana dostępu do danych uwierzytelniających |https://blog.nette.org/en/nette-http-3-2-change-access-to-credentials].
Aktualizacja do wersji 3.1
==========================
- cookies wysyłane są z flagą `sameSite: Lax`
- `cookieSecure` ma teraz domyślnie wartość 'auto'
- opcja `session.cookieSecure` jest przestarzała, używane jest zamiast niej `http.cookieSecure`
- cookie `nette-samesite` zostało przemianowane na `_nss`
- `Nette\Http\Request::getFile()` przyjmuje tablicę kluczy i zwraca `FileUpload|null`
- `Nette\Http\Session::getCookieParameters()` jest przestarzałe
- `Nette\Http\FileUpload::getName()` zostało przemianowane na `getUntrustedName()`
- `Nette\Http\Url`: `getBasePath()`, `getBaseUrl()` i `getRelativeUrl()` są przestarzałe (metody te są częścią `UrlScript`)
- `Nette\Http\Response::$cookieHttpOnly` jest przestarzałe
- `Nette\Http\FileUpload::getImageSize()` zwraca parę `[width, height]`
- przy `autoStart: smart` (domyślne) sesja nie jest już uruchamiana zaraz po starcie aplikacji tylko dlatego, że przeglądarka wysłała cookie sesyjne; uruchamia się przy pierwszym odczycie albo zapisie. Dodano wartości `always` i `never`.
- gdy przeglądarka wyśle ID sesji, dla którego żadna sesja nie istnieje, Nette usuwa cookie zamiast tworzyć nową sesję
- do dostępu do sekcji sesji preferuj metody `set()`, `get()` i `remove()`; w przeciwieństwie do dostępu przez właściwości poprawnie rozróżniają odczyt od zapisu i nie uruchamiają sesji niepotrzebnie
- wartości domyślne `cookiePath` i `cookieDomain` można ustawić w konfiguracji
Zachowanie sesji opisuje szczegółowo artykuł [Nette Http 3.1: znacznie sprytniejsze sesje |https://blog.nette.org/en/nette-http-3-1-much-smarter-sessions].
Aktualizacja do wersji 3.0
==========================
- obiekt `Nette\Http\UrlScript` (zwracany np. przez `Nette\Http\Request::getUrl()`) jest teraz niezmienny
- w `new Nette\Http\Url('abcd')` `abcd` reprezentuje ścieżkę, a nie domenę; od 3.0 `(new Nette\Http\Url('abcd'))->setScheme('http')` poprawnie generuje `http:abcd` zamiast wcześniejszego `http://abcd`
Aktualizacja
Aktualizacja do wersji 3.4
Minimalna wymagana wersja PHP to 8.3.
- metoda
Request::isSameSite() jest przestarzała na rzecz isFrom(), która ustala pochodzenie
żądania z nagłówków Sec-Fetch-*. Automatyczna ochrona formularzy i sygnałów staje się precyzyjniejsza, a
jedno zachowanie się zmienia: bezpośrednie wejście (zakładka, ręcznie wpisany adres, odnośnik w e-mailu) nie jest już
uznawane za same-site. Jeśli sygnał opiera się na odnośnikach akcji w e-mailach, oznacz go
#[Requires(sameOrigin: false)].
- cookie
_nss jest teraz wysyłane tylko do przeglądarek, które nie wysyłają
nagłówka Sec-Fetch-Site
setCookie() wysyła atrybut Max-Age i wymusza flagę Secure dla
SameSite=None oraz dla cookies partycjonowanych
- enum
SameSite zastępuje stałe IResponse::SameSiteLax itd., które są przestarzałe
- wygaśnięcie interpretowane jest wszędzie tak samo: liczba to względna liczba sekund, ciąg to interwał albo data.
Przekazywanie absolutnego uniksowego timestampu jest przestarzałe, a cookie sesyjne reprezentuje
null zamiast
0.
- przestarzała metoda
Request::getRemoteHost() zwraca null
- dawno przestarzała klasa
Nette\Http\UserStorage została usunięta
Całą historię przejścia na nagłówki Sec-Fetch-* opowiada artykuł Ćwierć wieku CSRF.
Aktualizacja do wersji 3.2
- dane uwierzytelniające z HTTP Basic Authentication nie są już częścią obiektu
Url, więc
$url->getUser() i $url->getPassword() zwracają pusty ciąg. Odczytasz je nową metodą
$request->getBasicCredentials().
Powody tej zmiany wyjaśnia artykuł Nette Http
3.2: zmiana dostępu do danych uwierzytelniających.
Aktualizacja do wersji 3.1
- cookies wysyłane są z flagą
sameSite: Lax
cookieSecure ma teraz domyślnie wartość ‘auto’
- opcja
session.cookieSecure jest przestarzała, używane jest zamiast niej http.cookieSecure
- cookie
nette-samesite zostało przemianowane na _nss
Nette\Http\Request::getFile() przyjmuje tablicę kluczy i zwraca FileUpload|null
Nette\Http\Session::getCookieParameters() jest przestarzałe
Nette\Http\FileUpload::getName() zostało przemianowane na getUntrustedName()
Nette\Http\Url: getBasePath(), getBaseUrl() i getRelativeUrl() są
przestarzałe (metody te są częścią UrlScript)
Nette\Http\Response::$cookieHttpOnly jest przestarzałe
Nette\Http\FileUpload::getImageSize() zwraca parę [width, height]
- przy
autoStart: smart (domyślne) sesja nie jest już uruchamiana zaraz po starcie aplikacji tylko dlatego, że
przeglądarka wysłała cookie sesyjne; uruchamia się przy pierwszym odczycie albo zapisie. Dodano wartości always
i never.
- gdy przeglądarka wyśle ID sesji, dla którego żadna sesja nie istnieje, Nette usuwa cookie zamiast tworzyć
nową sesję
- do dostępu do sekcji sesji preferuj metody
set(), get() i remove(); w przeciwieństwie
do dostępu przez właściwości poprawnie rozróżniają odczyt od zapisu i nie uruchamiają sesji niepotrzebnie
- wartości domyślne
cookiePath i cookieDomain można ustawić w konfiguracji
Zachowanie sesji opisuje szczegółowo artykuł Nette
Http 3.1: znacznie sprytniejsze sesje.
Aktualizacja do wersji 3.0
- obiekt
Nette\Http\UrlScript (zwracany np. przez Nette\Http\Request::getUrl()) jest teraz
niezmienny
- w
new Nette\Http\Url('abcd') abcd reprezentuje ścieżkę, a nie domenę; od 3.0
(new Nette\Http\Url('abcd'))->setScheme('http') poprawnie generuje http:abcd zamiast
wcześniejszego http://abcd