Django登录redirect_field_name'next'强制新会话

时间:2018-11-21 13:28:07

标签: django django-views django-login

我正在建立一个电子商务网站,我允许来宾用户将产品添加到他们的购物车中,以保存会话中的cart_id;当他们继续进行结帐时,我将其重定向到结帐视图中,如下所示进行登录

if not request.user.is_authenticated:
    login_url = reverse('accounts:login')
    check_out_url = reverse('cart:checkout')
    redirect_url = "{}?next={}".format(login_url, check_out_url)
    return redirect(redirect_url)
# checkout process here

它可以工作,但是cart_id不在会话中。 如果我不使用下一个参数,而只是重定向到login_url,则cart_id会保持会话状态。

P.S: login_required_decorator

也会发生相同的情况

有没有办法使会话数据保持完整?

1 个答案:

答案 0 :(得分:0)

我们需要更多信息才能确定,但​​这是基于经验的最佳猜测:

您确定重定向以cookie的方式将您带到同一个域吗?

例如,如果您在students.get(0).getCourses() 上通过了身份验证,并且foo.somedomain.com引用了next,那么Django(默认情况下)将要为这两个单独的域使用单独的cookie。 / p>

要使Django在给定域的所有子域中使用cookie,您需要将www.somedomain.comdocs)设置为该域。例如settings.SESSION_COOKIE_DOMAIN