@@ -11,6 +11,7 @@ export function sessionMiddleware(options: SessionOptions): MiddlewareHandler {
1111 const expireAfterSeconds = options . expireAfterSeconds
1212 const cookieOptions = options . cookieOptions
1313 const sessionCookieName = options . sessionCookieName || 'session'
14+ const autoExtendExpiration = options . autoExtendExpiration ?? false
1415
1516 if ( store instanceof CookieStore ) {
1617 store . sessionCookieName = sessionCookieName
@@ -27,7 +28,7 @@ export function sessionMiddleware(options: SessionOptions): MiddlewareHandler {
2728 }
2829
2930 const middleware = createMiddleware ( async ( c , next ) => {
30- const session = new Session
31+ const session = new Session ( expireAfterSeconds )
3132 let sid = ''
3233 let session_data : SessionData | null | undefined
3334 let createNewSession = false
@@ -55,7 +56,9 @@ export function sessionMiddleware(options: SessionOptions): MiddlewareHandler {
5556 session . setCache ( session_data )
5657
5758 if ( session . sessionValid ( ) ) {
58- session . reupSession ( expireAfterSeconds )
59+ if ( autoExtendExpiration ) {
60+ session . reupSession ( )
61+ }
5962 } else {
6063 store instanceof CookieStore ? await store . deleteSession ( c ) : await store . deleteSession ( sid )
6164 createNewSession = true
@@ -83,19 +86,25 @@ export function sessionMiddleware(options: SessionOptions): MiddlewareHandler {
8386 await store . createSession ( sid , defaultData )
8487 }
8588
86- session . setCache ( defaultData )
89+ session . setCache ( defaultData , true )
8790 }
8891
8992 if ( ! ( store instanceof CookieStore ) ) {
9093 setCookie ( c , sessionCookieName , encryptionKey ? await encrypt ( encryptionKey , sid ) : sid , cookieOptions )
9194 }
9295
93- session . updateAccess ( )
96+ if ( autoExtendExpiration ) {
97+ session . updateAccess ( )
98+ }
9499
95100 c . set ( 'session' , session )
96101
97102 await next ( )
98103
104+ if ( session . isStale ( ) ) {
105+ session . touch ( )
106+ }
107+
99108 const shouldDelete = session . getCache ( ) . _delete ;
100109 const shouldRotateSessionKey = c . get ( "session_key_rotation" ) === true ;
101110 const storeIsCookieStore = store instanceof CookieStore ;
@@ -136,7 +145,8 @@ export function sessionMiddleware(options: SessionOptions): MiddlewareHandler {
136145 */
137146 const shouldPersistSession =
138147 ! shouldDelete &&
139- ( ! shouldRotateSessionKey || storeIsCookieStore ) ;
148+ ( ! shouldRotateSessionKey || storeIsCookieStore ) &&
149+ session . isStale ( ) ;
140150
141151 if ( shouldPersistSession ) {
142152 store instanceof CookieStore
0 commit comments