【问题标题】:Session data lost after a HttpResponseRedirectHttpResponseRedirect 后会话数据丢失
【发布时间】:2018-11-25 04:46:36
【问题描述】:

我有这个设置会话变量的重定向视图。但是好像会话在被重定向到的视图被调用之前是flushed,因为整个会话在那里是空的。

(顺便说一句,这是真正的代码,我已经剪切了一些东西来查找原因但仍然找不到它。

class ActivateUserView(RedirectView):
    def get(self, request, *args, **kwargs):
        # activates user and redirects to listing
        listing = Listing.objects.get(id=2)
        request.session['test'] = 'icle'
        print("Session set to: ", request.session.get('test', "Nothing!"))
        return HttpResponseRedirect(reverse('listing-detail', kwargs={'pk': listing_pk, 'slug': listing.slug}))

上面的视图被重定向到:

class ListingDetailView(TemplateView):
    template_name = "frontend/detail.html"

    @method_decorator(ensure_csrf_cookie)
    def get(self, request, *args, **kwargs):
        print("Session data: ", request.session.get('test', "Nothing!"))
        return super(ListingDetailView, self).get(request, *args, **kwargs)

在控制台中,我得到:

Session set to:  icle 
Session data:  Nothing!

我已经检查了 django-debug-toolbar,在这里和那里引发异常,在重定向调用和视图之间的某个地方,所有会话数据都被删除了。

【问题讨论】:

  • 由于您正在修改顶级会话密钥,django 应该会看到并保存会话,所以有些不对...您可以分别尝试这两种方法,看看是否有任何区别? 1.手动调用request.session.save()。 2.设置'test'值后,设置request.session.modified = True。请注意,这些不应该是最终解决方案,我只是好奇这是否会改变行为。
  • 谢谢,但我找到了...我已将 SESSION_COOKIE_SECURE 设置为 True,但在开发模式下我没有使用 https...我会回答我的问题并将其留给如果需要删除它,请使用 mods。

标签: django django-sessions


【解决方案1】:

SESSION_COOKIE_SECURE 设置为 False(在我的开发设置中)解决了这个问题。我使用的是本地的非 https 开发环境。

【讨论】:

    猜你喜欢
    • 2018-11-04
    • 2016-05-10
    • 2012-12-16
    • 2014-12-05
    • 2018-01-27
    • 1970-01-01
    • 2013-06-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多