我一直在尝试使用cookie session来保存用户数据,我在之前的应用程序中成功使用了session,但这次它无法正常工作
我知道为了获取会话密钥的值,必须修改或保存会话。
所以我以前做过的就是制作一个 mixin 并用来在需要会话密钥的视图上调用它,我这里的情况是获取会话密钥并将该值保存在实例字段中,但会话密钥是 None 或者如果我将代码更改为我在底部编写的代码,它会在每个请求时创建一个新的会话密钥
这是我在之前的应用程序中使用的 mixin,它运行良好
class SessionMixin:
def get_session(self,request,*args,**kwargs):
session = self.request.session
if not session.get('has_session'):
session["has_session"] = True
return self.__class__.get(self,request,*args,**kwargs)
class MyView(SessionMixin,generic.View):
def get(self,request,*args,**kwargs):
super().get_session(self,request,*args,**kwargs)
print(self.request.session.session_key,"Gives me none")
# rest of the code goes here
我的会话cookie设置
SESSION_COOKIE_AGE = 604800
SESSION_ENGINE = "django.contrib.sessions.backends.signed_cookies"
这也是我尝试过的,但它只是在每个请求上创建了一个会话密钥。
class SessionMixin:
def get(self,request,*args,**kwargs):
session = self.request.session
if not session.session_key:
session.save()
您的
get
方法没有调用 get_session(...)
方法。另外,你可以这样实现:
class SessionMixin:
def get_session(self,request,*args,**kwargs):
if not request.session.session_key:
request.session.create()
return request
class MyView(SessionMixin,generic.View):
def get(self,request,*args,**kwargs):
self.get_session(request)
print(request.session.session_key)
return super().get(request,*args,**kwargs)
我正在使用
create()
方法而不是 save()
。因为它的目的是创建新的会话。更多信息可以在文档中找到。
我在我的一个应用程序中遇到了与您相同的问题。 我用这段代码解决了这个问题。 您将不再拥有 session_key None。
if request.user.is_anonymous:
request.session['cached_session_key'] = request.session.session_key