Django中的Session key是None吗?

slmsl1lt  于 12个月前  发布在  Go
关注(0)|答案(2)|浏览(82)

我一直在尝试使用cookie会话来保存用户的数据,我已经在我以前的应用程序中成功地使用了会话,但这一次它无法正常工作
我知道为了得到会话密钥的值,必须修改或保存会话。
我以前做的是做一个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()

vfh0ocws

vfh0ocws1#

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

uwopmtnx

uwopmtnx2#

我在我的一个应用程序中遇到了和你一样的问题。我用这段代码解决了这个问题。你将不再有session_key None。

if request.user.is_anonymous:
       request.session['cached_session_key'] = request.session.session_key

字符串

相关问题