2016-10-26 10 views
0

Недавно я обнаружил, что функция выхода из моего приложения Django, кажется, сломана. Я считаю, что это работало в прошлом, но я не могу понять, почему он сейчас не работает.Сессия 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 %} 

Где "simple_logo_base.html" это просто обычный HTML структура с DIV, содержащий логотип.

Проблема: Врезка работает отлично. Если я попытаюсь открыть ограниченную страницу index.html, я перенаправлен на страницу входа в систему, могу войти в систему и получить доступ к странице с ограничениями.

Как только я вошел в систему, и я нажимаю кнопку «Выход» (см. Выше), я также перенаправляется на страницу logout.html, однако я все еще могу вернуться к index.html, и я все еще записываю in

Поэтому я посмотрел таблицу «django_sessions» в базе данных и заметил, что сеанс никогда не удаляется. Если я вручную удалю его, я снова перенаправляюсь на страницу входа в систему при обращении к index.html.

Что я делаю неправильно? В чем может быть проблема?

Недавно я обновился до Django 1.10, а также добавил рамки кэширования в свой проект. Может ли это быть связано с любым из этих изменений?

ответ

0

Я решил проблему между тем. Тем не менее, я не знаю, какая именно проблема была. Если кто-то испытывает подобные проблемы, вот вещи, которые я пытался (и, видимо, решил вопрос для меня):

  • Сброс всех Auth связанных URL
  • изменения настроек
  • Использование @vary_on_cookie декоратор для кэширования страниц на основе сессия
  • Очистить все кэши и сеансы

Я думаю, что проблема была в основном связана с кэшированием. При использовании декоратора @cache_page кеширование выполняется только на запрошенном URL-адресе. Поэтому каждый пользователь получил одну и ту же страницу в кеше, даже если он уже вышел из системы. Однако это не объясняет, почему сеанс не был удален при выходе из системы. Так что, возможно, что-то другое было главной проблемой здесь.