save sessions after middleware that way middleware can mutate the session and it will properly save (mirror this in websocket middle

Commit 221685f · patx · 2025-12-03T20:32:06-05:00

Changeset
221685ff053f66a644ac9ca32fa1a2724d481f43
Parents
70183156fee663c4faac7375a8d7144edc50c4bc

View source at this commit

Comments

No comments yet.

Log in to comment

Diff

diff --git a/micropie.py b/micropie.py
index b5c8acc..8185acc 100644
--- a/micropie.py
+++ b/micropie.py
@@ -832,14 +832,17 @@ class App:
                 await self._send_websocket_close(send, 1011, f"Handler error: {str(e)}")
                 return
 
-            # Save session
-            if request.session:
-                await self.session_backend.save(ws.session_id, request.session, SESSION_TIMEOUT)
-
             # Run WebSocket middleware after_websocket
             for mw in self.ws_middlewares:
                 await mw.after_websocket(request)
 
+            # Save / clear session after middlewares
+            if request.session:
+                await self.session_backend.save(ws.session_id, request.session, SESSION_TIMEOUT)
+            else:
+                # Treat empty session as logout/delete
+                await self.session_backend.save(ws.session_id, {}, 0)
+
         finally:
             current_request.reset(token)