django 中的会话密钥为“无”?

问题描述 投票:0回答:2

我一直在尝试使用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() 
python django django-sessions
2个回答
0
投票

您的

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()
。因为它的目的是创建新的会话。更多信息可以在文档中找到。


0
投票

我在我的一个应用程序中遇到了与您相同的问题。 我用这段代码解决了这个问题。 您将不再拥有 session_key None。

    if request.user.is_anonymous:
       request.session['cached_session_key'] = request.session.session_key
© www.soinside.com 2019 - 2024. All rights reserved.