每次页面加载时django会话安全弹出窗口

时间:2018-09-19 07:36:49

标签: django security session popup warnings

我在Django 1.9上安装了django-session-security 2.6.1,以便在两个小时后注销不活动的用户。我的设置中包含以下内容:

   INSTALLED_APPS = (
    ...
        'session_security',
    ...
    ]
    MIDDLEWARE_CLASSES = (
    'django.contrib.sessions.middleware.SessionMiddleware',
    'intro.middleware.director.SiteDirector',
    'corsheaders.middleware.CorsMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'session_security.middleware.SessionSecurityMiddleware',
    'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.locale.LocaleMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    'django.middleware.security.SecurityMiddleware',
    'reversion.middleware.RevisionMiddleware',
    'intro.middleware.persistfilter.FilterPersistMiddleware',
    'content.middleware.content.ContentMiddleware',
    'intro.middleware.booking.BookingMiddleware',
    'common.middleware.accounts.PasswordChangeMiddleware'
)

    # session security
    SESSION_SECURITY_WARN_AFTER = 6900
    SESSION_SECURITY_EXPIRE_AFTER = 7200
    SESSION_EXPIRE_AT_BROWSER_CLOSE = True
    ...

以及<head>

中的base.html中
<script src="{% static "suit/js/jquery-1.8.3.min.js" %}"></script>
{% include 'session_security/all.html' %}

对于网站上的每个页面加载(如果经过10秒或更长时间),导航到 same 域中的另一个页面时,会出现以下弹出窗口 enter image description here 这不仅在Firefox上,而且在Chrome上。搜索具有类似问题的其他人不会产生有用的结果,但是表明该问题是由JavaScript onbeforeunload命令引起的:

我还有另一个项目Django 1.6.1和django-session-security 2.2.4。我能看到的唯一区别是,在Django 1.9中,必须在重新加载任何页面时使SESSION_EXPIRE_AT_BROWSER_CLOSE = True或django崩溃,而在Django 1.6.1中却完全没有设置。我的jquery版本可能有问题吗?任何解决方案将不胜感激。

如果我愿意的话,只需加上

{% include 'session_security/all.html' %}
从base.html中

退出,则我不再显示弹出窗口,但是警告不显示。用户仍然注销。另一注,我有

url(r'session_security/', include('session_security.urls')),

在urls.py中。

更新 django-smart-selects有一些不兼容, 尤其是

(function($) {
            var chainfield = "#id_supplier";
            var url = "/chaining/filter/money/Item/supplier/intro/BookingItem/item";
            var id = "#id_item";
            var value = undefined;
            var auto_choose = true;
            var empty_label = "---------";

            $(document).ready(function() {
                chainedfk.init(chainfield, url, id, value, empty_label, auto_choose);
            });
        })(jQuery || django.jQuery);

这似乎是从我的模板中注入的 smart_selects / static / smart-selects / admin / js / chainedfk.js

我只能猜测jQuery || django.jQuery的含义是根据设置的变量jQuery或django.jQuery,并将其传递给函数,然后……那么我就此参数的含义迷失了用于或在何处使用。

我尝试指定智能选择应使用的jQuery,但这没有什么区别。 看来我应该实现自己的select update ajax调用。

1 个答案:

答案 0 :(得分:1)

DSS不会使用表单重定向页面,以确保您不会丢失表单数据。您可以重写一个处理程序confirmFormDiscard来修复它。回购中的issue #39中有一些讨论,但建议的解决方法似乎是:

{% include 'session_security/all.html' %}
<script>
   sessionSecurity.confirmFormDiscard = undefined;
</script>

FAQ中也提到了这一点。