sidebase / nuxt-session

Nuxt session middleware to get a persistent session per app user, e.g., to store data across multiple requests. The nuxt session module provides the useSession() composable out of the box and sets up API endpoints to interact with your session to make working with sessions feel like a breeze.
https://sidebase.io/nuxt-session/
MIT License
189 stars 19 forks source link

Add saveUninitialized option #41

Open interpretor opened 1 year ago

interpretor commented 1 year ago

Forces a session that is "uninitialized" to be saved to the store. A session is uninitialized when it is new but not modified. Choosing false is useful for implementing login sessions, reducing server storage usage, or complying with laws that require permission before setting a cookie.

The default is true, as it has been before, so it shouldn't affect the current behavior of the middleware. The option should behave similar to the saveUninitialized option in express-session.

Implementing this has been a bit tricky. The idea was to get a listener to the event.context.session server object, which creates a session when the object has been modified and therefore sends a cookie to the client. I'm not aware of any listener which gets called when every event handler is finished, so I built a proxy for the res.end() method to get a hook to the very end of all event listeners.

The proxy is only in use when setting saveUninitialized = false.