Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 70f906c

Browse filesBrowse files
authored
Merge pull request from GHSA-m2qf-hxjv-5gpq
set `Vary: Cookie` header consistently for session
2 parents 9532cba + 8705dd3 commit 70f906c
Copy full SHA for 70f906c

File tree

Expand file treeCollapse file tree

2 files changed

+29
-4
lines changed
Filter options
Expand file treeCollapse file tree

2 files changed

+29
-4
lines changed

‎src/flask/sessions.py

Copy file name to clipboardExpand all lines: src/flask/sessions.py
+6-4Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -329,6 +329,10 @@ def save_session(
329329
samesite = self.get_cookie_samesite(app)
330330
httponly = self.get_cookie_httponly(app)
331331

332+
# Add a "Vary: Cookie" header if the session was accessed at all.
333+
if session.accessed:
334+
response.vary.add("Cookie")
335+
332336
# If the session is modified to be empty, remove the cookie.
333337
# If the session is empty, return without setting the cookie.
334338
if not session:
@@ -341,13 +345,10 @@ def save_session(
341345
samesite=samesite,
342346
httponly=httponly,
343347
)
348+
response.vary.add("Cookie")
344349

345350
return
346351

347-
# Add a "Vary: Cookie" header if the session was accessed at all.
348-
if session.accessed:
349-
response.vary.add("Cookie")
350-
351352
if not self.should_set_cookie(app, session):
352353
return
353354

@@ -363,3 +364,4 @@ def save_session(
363364
secure=secure,
364365
samesite=samesite,
365366
)
367+
response.vary.add("Cookie")

‎tests/test_basic.py

Copy file name to clipboardExpand all lines: tests/test_basic.py
+23Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -501,6 +501,11 @@ def getitem():
501501
def setdefault():
502502
return flask.session.setdefault("test", "default")
503503

504+
@app.route("/clear")
505+
def clear():
506+
flask.session.clear()
507+
return ""
508+
504509
@app.route("/vary-cookie-header-set")
505510
def vary_cookie_header_set():
506511
response = flask.Response()
@@ -533,11 +538,29 @@ def expect(path, header_value="Cookie"):
533538
expect("/get")
534539
expect("/getitem")
535540
expect("/setdefault")
541+
expect("/clear")
536542
expect("/vary-cookie-header-set")
537543
expect("/vary-header-set", "Accept-Encoding, Accept-Language, Cookie")
538544
expect("/no-vary-header", None)
539545

540546

547+
def test_session_refresh_vary(app, client):
548+
@app.get("/login")
549+
def login():
550+
flask.session["user_id"] = 1
551+
flask.session.permanent = True
552+
return ""
553+
554+
@app.get("/ignored")
555+
def ignored():
556+
return ""
557+
558+
rv = client.get("/login")
559+
assert rv.headers["Vary"] == "Cookie"
560+
rv = client.get("/ignored")
561+
assert rv.headers["Vary"] == "Cookie"
562+
563+
541564
def test_flashes(app, req_ctx):
542565
assert not flask.session.modified
543566
flask.flash("Zap")

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.