アップグレード
バージョン 3.4 へのアップグレード
必要な PHP の最小のバージョンは 8.3 です。
Request::isSameSite()メソッドは非推奨になり、Sec-Fetch-*のヘッダーからリクエストの出どころを判断するisFrom()に取って代わられました。フォームとシグナルの自動の保護はより正確になり、振る舞いがひとつ変わります。直接の移動(ブックマーク、手で打ったアドレス、メールの中のリンク)は、もう同一サイトとは見なされません。シグナルがメールの中の操作のリンクに頼っているなら、#[Requires(sameOrigin: false)]で印を付けてください。_nssのクッキーは、Sec-Fetch-Siteのヘッダーを送らないブラウザにだけ送られるようになりましたsetCookie()はMax-Ageの属性を送り、SameSite=Noneと分割されたクッキーにはSecureのフラグを強制します- enum の
SameSiteが定数IResponse::SameSiteLaxなどに取って代わり、それらは非推奨になりました - 有効期限はどこでも同じように解釈されます。数は相対の秒数、文字列は間隔か日付です。絶対の
UNIX タイムスタンプを渡すのは非推奨で、セッションのクッキーは
0ではなくnullで表します。 - 非推奨のメソッド
Request::getRemoteHost()はnullを返します - ずっと前から非推奨だったクラス
Nette\Http\UserStorageは取り除かれました
Sec-Fetch-* のヘッダーへ切り替えるまでの物語は、記事 CSRF の四半世紀で語られています。
バージョン 3.2 へのアップグレード
- HTTP Basic 認証の資格情報は
Urlオブジェクトの一部ではなくなったので、$url->getUser()と$url->getPassword()は空の文字列を返します。新しいメソッド$request->getBasicCredentials()で読んでください。
この変更の理由は、記事 Nette Http 3.2: 資格情報へのアクセスの変更で説明されています。
バージョン 3.1 へのアップグレード
- クッキーは
sameSite: Laxのフラグ付きで送られます cookieSecureの既定値は ‚auto‘ になりましたsession.cookieSecureのオプションは非推奨で、代わりにhttp.cookieSecureが使われます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()は組[幅, 高さ]を返しますautoStart: smart(既定)では、ブラウザがセッションのクッキーを送ったというだけで、アプリケーションの開始直後にセッションが始まることはもうありません。最初の読み書きのときに始まります。値alwaysとneverが足されました。- ブラウザが、存在しないセッションの ID を送ってきた場合、Nette は新しいセッションを作る代わりにそのクッキーを消します
- セッションの区画へのアクセスには
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を生成します