アップグレード

バージョン 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(既定)では、ブラウザがセッションのクッキーを送ったというだけで、アプリケーションの開始直後にセッションが始まることはもうありません。最初の読み書きのときに始まります。値 alwaysnever が足されました。
  • ブラウザが、存在しないセッションの ID を送ってきた場合、Nette は新しいセッションを作る代わりにそのクッキーを消します
  • セッションの区画へのアクセスには set()get()remove() のメソッドを使ってください。プロパティへのアクセスと違って、読みと書きを正しく見分け、必要もないのにセッションを始めません
  • cookiePathcookieDomain の既定値は設定で決められます

セッションの振る舞いは、記事 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