<div dir="ltr">I'm curious about request.getSession<div><br></div><div>Per the docs:</div><div><a href="https://twistedmatrix.com/documents/current/web/howto/using-twistedweb.html">https://twistedmatrix.com/documents/current/web/howto/using-twistedweb.html</a><br></div><div><br></div><div>It seems like it's tricky to use correctly. My code needs to:</div><div> - define an Interface</div><div> - define a class that implements my Interface</div><div> - call registerAdapter, passing in my class, server.Session and my Interface</div><div> - get a Session instance</div><div> - brace myself</div><div> - create an instance of my Interface class, passing in the Session instance</div><div> - update that Interface instance.... it will persisted, but only in-memory</div><div><br></div><div>By default, that data doesn't go to database/memcached/whatever, so it's only accessible in-process</div><div><br></div><div>On first blush, that seems like a lot of legwork. I'm not clear on what utility's provided by all this versus say maintaining a dict as a class-attribute on Site or something. It's also (for me) counter-intuitive to be creating an instance of an _Interface_ and poking data into it.</div><div><br></div><div>Also I was a bit surprised that getSession doesn't return a deferred, since it seems like it'd be common to want to persist session data in an external store so that multiple twisted-web processes can access it in a clustered/load-balanced setup. How do other folks go about that?</div><div><br></div><div>I hacked something together a while ago to run session data into Redis, but what I ended up with required so much surgery on twisted web's classes that I figured I must be doing it wrong. I think Site, SessionFactory and Request were all customised.</div><div><br></div><div>I was thinking about this again in the context of Cory's "Implement server-side HTTP/2 server push" ticket:</div><div><a href="https://twistedmatrix.com/trac/ticket/8485">https://twistedmatrix.com/trac/ticket/8485</a></div><div><br></div><div>In this context, I'd like to have access to my session data in multiple Resource objects without _necessarily_ having to round-trip to an external store each time to get/put the same data. In the case of http 1.1 requests, I guess there's no way around that round-trip, so it might be optimal if my Resource objects could be oblivious to the underlying protocol version and Session get/put mechanism.</div><div><br></div><div>So it'd be great if the default Session mechanism could take care of me there, and I could just have my cake and eat it.</div><div><br></div><div>Another wrinkle that surprised me when I was hacking on this was that there didn't seem to be a way to uniquely identify a request instance, so within the session code it was impossible to tell if two calls to getSession were coming from different points in the callback chain responding to a single Request, or if the second belonged to a different Request entirely.</div><div><br></div><div>So my confusion is probably apparent at this stage :)</div><div><br></div><div>I'm guessing others have been here before me. What approaches have you taken to storing your sessions? Are there good open source projects that I should look to for best practice?</div><div><br></div><div>Thanks!</div><div><br></div><div>DJM</div><div><br></div><div><br></div><div><br></div></div>