我爲我的web應用程序使用金字塔,這需要對每個請求進行csrf檢查。在ajax調用期間,csrf令牌被設置爲每個請求的頭部。一切正常的1線程與1工人,但只要我允許多個工人,工人2開不知道,從工人1,他們如何份額的CSRF令牌,令牌?在Pyramid中用多個gunicorn工人檢查CSRF
問候
爲gunicorn production.ini:
[server:main] # GUNICORN
use = egg:gunicorn#main
bind = unix:/tmp/gunicorn.sock
workers = 2
threads = 1
preload = true
reload = true
accesslog = gunicorn_access.log
loglevel = info
在金字塔我只設置:
config.set_default_csrf_options(require_csrf=True)
我的HTML-skeletion有:
<input type="hidden" id="hidden_csrf_token" name="csrf_token" value="${request.session.get_csrf_token()}">
而且每AJAX請求:
var csrf_token = $('#' + hiddenCSRFTokenId).val();
...
headers: {'X-CSRF-Token': csrf_token}
編輯:我使用的是像
session_factory = session_factory_from_settings(settings)
...
config.set_session_factory(session_factory)
的默認會話工廠一息尚存,我想用燒杯:
# Beaker cache
beaker.cache.regions = short_term, long_term
beaker.cache.type = memory
beaker.cache.short_term.expire = 3600
beaker.cache.long_term.expire = 86400
# Beaker sessions
beaker.session.type = redis
beaker.session.data_dir = %(here)s/data/sessions/data
beaker.session.lock_dir = %(here)s/data/sessions/lock
beaker.session.autor = true
#beaker.session.type = memory
beaker.session.key = dbas_prototyp
beaker.session.secret = ...
beaker.session.cookie_max_age = 3600
beaker.session.timeout = 3600
beaker.session.cookie_expires = true
beaker.session.url:127.0.0.1:4284
難道我錯過了一些東西,同時設立燒杯?
CSRF令牌是由會話給出的。你如何設置你的會議?工作人員如何分享會話數據? –
進行編輯並添加了代碼thx。 –