每次页面加载时都会弹出 Django 会话安全性
django session security popup on every page load
我在 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
...
和 base.html 在 <head>
<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 或 django.jQuery 根据哪个设置,然后将其传递给函数然后...那么我不知道该参数的用途或使用位置。
我已经尝试指定智能 select 应该使用的 jQuery,但这没有任何区别。
看来我应该实现自己的 select 更新 ajax 调用。
我在 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
...
和 base.html 在 <head>
<script src="{% static "suit/js/jquery-1.8.3.min.js" %}"></script>
{% include 'session_security/all.html' %}
对于站点上的每个页面加载,如果经过 10 秒或更长时间,导航到 same 域上的另一个页面时会出现以下弹出窗口
我还有另一个项目 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 根据哪个设置,然后将其传递给函数然后...那么我不知道该参数的用途或使用位置。
我已经尝试指定智能 select 应该使用的 jQuery,但这没有任何区别。 看来我应该实现自己的 select 更新 ajax 调用。