Cannot modify existing sessions using signed_cookies backend

17 views
Skip to first unread message

Krishna Chaitanya

unread,
Jul 3, 2020, 5:29:19 PM7/3/20
to Django users
Hi Guys, 

I am using sessions in my webapp, and don't want to use a db/file backends as my device
has small storage, so, using signed_cookies backend, I need to store and modify per-session data
across places and use the session_key to lookup, modify and then save. But every save creates a 
new session, so, the change isn't propagated to other views. 

func_view(request)
   start_async_oper(func_non_view, args=request.session)
   # session is created in another view
   request.session.data = 1

func_view2(request):
   check (request.session.data == 2)

func_non_view(session):
  session = SessionStore(session_key=session.session_key)
  session.data = 2
  session.save()

Session_key is passed from view to non-view and then I am using Sessionstore(session_key) to 
lookup the session from non-view, and then after modification normally do a save() and from the
view, I read updated session values. 

This logic works if I use either a db/file backend. 
Also confirmed this behavior by looking at the save() function of various backends.

If I just change the session data (not from a view), but don't do a save I can see that the session_key hasn't changed
but obviously the change isn't reflected. 

The Django version is 1.11 (Default Ubuntu18.04, cannot update) but looks like the signed_cookies code hasn't changed.

Looks like a bug to me? am I missing anything? I can move the session update to a view and use some globals but 
this design keeps it simple by storing the data in the session.

Any help is appreciated.

Thanks.
Reply all
Reply to author
Forward
0 new messages