【问题标题】:Session key is None in django?会话密钥在 Django 中是 None 吗?
【发布时间】:2020-03-31 12:01:20
【问题描述】:

我一直在尝试使用 cookie 会话来保存用户的数据,我在以前的应用程序中成功使用了会话,但这次它不能正常工作

我知道为了获得会话密钥的值,会话必须修改或保存。

所以我以前做的是制作一个 mixin,并在我需要会话密钥的视图上调用它,这里的情况是获取会话密钥并将该值保存在实例字段中,但是会话密钥为无,或者如果我将代码更改为我在底部编写的代码,它会在每次请求时创建一个新的会话密钥

这是我在以前的应用程序中使用的 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


    【解决方案1】:

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

    【讨论】:

    • 对不起,我知道我已经调用了 super().get,但在我的代码中我实际上调用了 super().get_session,这是一个错字,我已经修复了
    • 这个答案是否解决了创建的多会话密钥?
    • 不,session_key 仍然没有
    • 另外,如果您能帮忙,我还有一个问题。
    • 这是那个问题的链接stackoverflow.com/questions/60929560/…
    猜你喜欢
    • 2021-09-02
    • 2017-02-14
    • 2013-04-28
    • 1970-01-01
    • 2012-06-26
    • 1970-01-01
    • 2012-07-20
    • 2023-04-06
    • 2011-07-05
    相关资源
    最近更新 更多