The session middleware let's you save a session object in the Router context
so you can access it in any loader and ensure you're always working with the
same Session instance.
By default the middleware will automaticaly commit the session at the end of
the request, but you can customize this behavior by passing a second
argument to the createSessionMiddleware function.
let [sessionMiddleware, getSession] = createSessionMiddleware( sessionStorage, shouldCommit );
The shouldCommit function will be called at the end of the request with
the previous session data and the session data before the request, if it
returns true the session will be committed, if it returns false the
session will be discarded.
If you want to commit the session only if the session data changed you can
use a library like dequal to compare the session data.
import { dequal } from"dequal";
let [sessionMiddleware, getSession] = createSessionMiddleware( sessionStorage, (previous, next) => !dequal(previous, next) // Only commit if session changed );
Or you can use a custom function to compare the session data, maybe only if
some specific fields changed.
This allows you to create a session storage that is specific to the request
and context, for example, to set a different cookie domain based on the
request hostname.
This is useful if you have a multi-tenant application where each tenant
has its own domain and you want to use a different session cookie for each
tenant.
The session middleware let's you save a session object in the Router context so you can access it in any loader and ensure you're always working with the same Session instance.
To use it, you need to create a session storage object and pass it to the middleware.
Then you can use the
sessionMiddleware
in yourapp/root.tsx
function.And you can use the
getSession
function in your loaders to get the session object.By default the middleware will automaticaly commit the session at the end of the request, but you can customize this behavior by passing a second argument to the
createSessionMiddleware
function.The
shouldCommit
function will be called at the end of the request with the previous session data and the session data before the request, if it returnstrue
the session will be committed, if it returnsfalse
the session will be discarded.If you want to commit the session only if the session data changed you can use a library like
dequal
to compare the session data.Or you can use a custom function to compare the session data, maybe only if some specific fields changed.
Optionally, you can also pass a getter function to
createSessionMiddleware
to dynamically create the session storage based on the request and context.This allows you to create a session storage that is specific to the request and context, for example, to set a different cookie domain based on the request hostname.
This is useful if you have a multi-tenant application where each tenant has its own domain and you want to use a different session cookie for each tenant.
Author
Sergio XalambrÃ