【问题标题】:django session security popup on every page load每次页面加载时都会弹出 django 会话安全性弹出窗口
【发布时间】:2018-10-03 06:20:36
【问题描述】:

我在 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 域上的另一个页面时会出现以下弹出窗口 这不仅在 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 OR django.jQuery 根据哪个设置,然后传递给函数,然后......好吧,我不知道这个参数的用途用于或使用它的地方。

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

【问题讨论】:

  • 您的页面上是否有表单?例如。右上角的(隐藏?)登录对话框。有一些关于在存在表单时防止自动导航以避免数据丢失的讨论。
  • 是的,页面上有一个表单,它使用jQuery。你有你提到的讨论的链接吗?

标签: django security session popup warnings


【解决方案1】:

DSS 不会重定向带有表单的页面,以确保您不会丢失表单数据。有一个处理程序confirmFormDiscard,您可以覆盖它来修复它。在 repo 的 issue #39 中有一些讨论,但建议的修复似乎是:

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

FAQ中也提到了这一点。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-30
    • 1970-01-01
    • 1970-01-01
    • 2018-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多