注销后不会删除Django会话

时间:2016-10-26 18:44:26

标签: django django-authentication django-sessions

我最近发现我的Django应用程序的注销功能似乎被打破了。我相信它在过去有效,但我无法弄清楚为什么它现在不起作用。

这就是我的设置:

的index.html:

...
{% if request.user.is_authenticated %}
    <a style="position: absolute; top: 0; left: 0;" href="{% url 'auth_logout' %}">Logout</a>
{% else %}
    <a style="position: absolute; top: 0; left: 0;" href="{% url 'auth_login' %}">Login</a>
{% endif %}
...

urls.py:

...
from django.contrib.auth import views as auth_views
...

urlpatterns = [
    ...,
    url(r'^accounts/logout/$', auth_views.logout, name='auth_logout'),
    url(r'^accounts/login/$', auth_views.login, name='auth_login'),
    ...
]

模板:

的login.html:

{% extends 'simple_logo_base.html' %}

{% block content %}
    <div class="row">
        <div class="col-md-3"></div>
        <div class="col-md-6">
            <h2>Login</h2>
            {% if next %}
                <form action="/accounts/login/?next={{next}}" method="post" >
            {%else%}
                <form action="/accounts/login/" method="post" >
            {% endif %}
                {% csrf_token %}
                {{ form.as_p }}
                <button type="submit">Login</button>
            </form>
        </div>
        <div class="col-md-3"></div>
    </div>
{% endblock %}

logout.html:

{% extends 'simple_logo_base.html' %}

{% block content %}
    <h2 class="text-center">Logged out</h2>
{% endblock %}

其中&#34; simple_logo_base.html&#34;只是普通的html结构,带有包含徽标的div。

问题: 登录工作完全正常。如果我尝试访问受限制的index.html页面,我将被重定向到登录页面,可以登录并可以访问受限页面。

登录后,我点击&#34;退出&#34;按钮(见上文)我也被重定向到logout.html页面,但是,我仍然可以返回index.html并且我仍然登录。

因此,我看了一下&#34; django_sessions&#34;数据库中的表,并注意到会话永远不会被删除。如果我手动删除它,那么在访问index.html时我会再次被重定向到登录页面。

我做错了什么?可能是什么问题?

我最近升级到了Django 1.10并且还在我的项目中添加了缓存框架。它可能与任何这些变化有关吗?

1 个答案:

答案 0 :(得分:0)

我同时解决了这个问题。但是,我不确定究竟是什么问题。如果其他人遇到类似的问题,这里有我尝试过的东西(这显然解决了我的问题):

  • 重置所有与身份验证相关的网址配置
  • 使用@vary_on_cookie装饰器根据会话
  • 缓存页面
  • 清除所有缓存和会话

我认为问题主要与缓存有关。使用@cache_page装饰器时,缓存仅基于请求的URL。因此,每个用户都收到了相同的缓存页面,即使他已经注销了。但是,这并不能解释在注销时未删除会话的原因。所以也许其他东西是这里的主要问题。

相关问题