diff --git a/CHANGES.rst b/CHANGES.rst index 1b36ee39e3..78f1ad329a 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -3,8 +3,8 @@ Version 2.3.2 Unreleased -- Session cookie sets ``Vary: Cookie`` header when it is accessed, modified, cleared, - or refreshed. +- Set ``Vary: Cookie`` header when the session is accessed, modified, or refreshed. +- Update Werkzeug requirement to >=2.3.3 to apply recent bug fixes. Version 2.3.1 diff --git a/pyproject.toml b/pyproject.toml index 08601bafa4..400ed59f85 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -20,7 +20,7 @@ classifiers = [ ] requires-python = ">=3.8" dependencies = [ - "Werkzeug>=2.3.0", + "Werkzeug>=2.3.3", "Jinja2>=3.1.2", "itsdangerous>=2.1.2", "click>=8.1.3", diff --git a/src/flask/testing.py b/src/flask/testing.py index 21f8aa010f..773f1525ee 100644 --- a/src/flask/testing.py +++ b/src/flask/testing.py @@ -138,21 +138,14 @@ def session_transaction( :meth:`~flask.Flask.test_request_context` which are directly passed through. """ - # new cookie interface for Werkzeug >= 2.3 - cookie_storage = self._cookies if hasattr(self, "_cookies") else self.cookie_jar - - if cookie_storage is None: + if self._cookies is None: raise TypeError( "Cookies are disabled. Create a client with 'use_cookies=True'." ) app = self.application ctx = app.test_request_context(*args, **kwargs) - - if hasattr(self, "_add_cookies_to_wsgi"): - self._add_cookies_to_wsgi(ctx.request.environ) - else: - self.cookie_jar.inject_wsgi(ctx.request.environ) # type: ignore[union-attr] + self._add_cookies_to_wsgi(ctx.request.environ) with ctx: sess = app.session_interface.open_session(app, ctx.request) @@ -169,14 +162,11 @@ def session_transaction( with ctx: app.session_interface.save_session(app, sess, resp) - if hasattr(self, "_update_cookies_from_response"): - self._update_cookies_from_response( - ctx.request.host.partition(":")[0], resp.headers.getlist("Set-Cookie") - ) - else: - self.cookie_jar.extract_wsgi( # type: ignore[union-attr] - ctx.request.environ, resp.headers - ) + self._update_cookies_from_response( + ctx.request.host.partition(":")[0], + ctx.request.path, + resp.headers.getlist("Set-Cookie"), + ) def _copy_environ(self, other): out = {**self.environ_base, **other}