Skip to content

Commit 04e945d

Browse files
committed
redis session cache key prefix
1 parent b6f5461 commit 04e945d

1 file changed

Lines changed: 13 additions & 4 deletions

File tree

server/app.ts

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -104,12 +104,23 @@ redisClient.on('error', (err) => {
104104
})
105105

106106
// Initialize store.
107+
// Calculate session max age in seconds (for Redis TTL)
108+
const sessionMaxAgeSeconds = process.env.VITE_SESSION_MAX_AGE
109+
? parseInt(process.env.VITE_SESSION_MAX_AGE)
110+
: 60 * 60 // Default: 1 hour in seconds
111+
112+
// CRITICAL: Set Redis TTL to match session maxAge
113+
// Without this, Redis uses its own default TTL which may expire sessions prematurely
107114
let redisStore = new RedisStore({
108115
client: redisClient,
109-
prefix: 'api-explorer-ii:'
116+
prefix: 'api-explorer-ii:',
117+
ttl: sessionMaxAgeSeconds // TTL in seconds - MUST match cookie maxAge
110118
})
111119

112120
console.info(`Environment: ${app.get('env')}`)
121+
console.info(
122+
`Session maxAge configured: ${sessionMaxAgeSeconds} seconds (${sessionMaxAgeSeconds / 60} minutes)`
123+
)
113124
app.use(express.json())
114125
let sessionObject = {
115126
store: redisStore,
@@ -119,9 +130,7 @@ let sessionObject = {
119130
cookie: {
120131
httpOnly: true,
121132
secure: false,
122-
maxAge: process.env.VITE_SESSION_MAX_AGE
123-
? parseInt(process.env.VITE_SESSION_MAX_AGE) * 1000
124-
: 60 * 60 * 1000 // Default: 1 hour in milliseconds (value in env should be in seconds)
133+
maxAge: sessionMaxAgeSeconds * 1000 // maxAge in milliseconds
125134
}
126135
}
127136
if (app.get('env') === 'production') {

0 commit comments

Comments
 (0)