Nested struct keys are not persisted correctly with sessionStorage and sessionCluster = false

Description

This one took a while to track down:

We are using redis for session storage and the Lucee Redis extension (not in sentinel mode). We have this.sessionCluster = false; in our Application.cfc.

We noticed that, when we would destroy a Docker container and re-create it, a handful of session keys would vanish while most of them would be just fine. This was pretty baffling since redis was clearly working and we've used it with Lucee in other apps without issues.

We traced the common factor of the disappearing keys to the following condition:

On page1.cfm:

On page2.cfm:

Everything works fine until you destroy the server and restart it. Dump the session and you'll see that session.someStruct.foo and session.someStruct.baz are both still there while session.someStruct.aNewKey is gone.

However, if you replace page2.cfm with this, it works:

Something about affirmatively declaring the entire struct at once causes it to persist in a way that Lucee 'remembers'.

Also, if you have this.sessionCluster = true; in your Application.cfc, this problem goes away, but that setting has a lot of other repercussions.

Based on my analysis of the problem, I suspect you would see this with any back-end session storage and not just Redis, though possibly it is an issue with just the extension.

Environment

None

Assignee

Unassigned

Reporter

Samuel W. Knowlton

Priority

Critical

Labels

Fix versions

None

Affects versions

Configure