在带有Apache2的Linux服务器上运行Django 1.2.5,由于某些原因,Django似乎无法存储CSRF或会话cookie。因此,当我试图登录到Django管理员时,它在提交登录表单时会给我一个CSRF验证错误。有人反对这个问题并找到解决办法吗?在
当我在主机提供的VPS的url上尝试此操作时,我能够发出有效的帖子。示例:vps123。hostdomain.com/admin/对于这个域,cookies确实设置好了。但是,当我去www.sitedomain.com/admin/尝试登录时,我收到一个csrf403错误,说cookie不存在,当我检查浏览器cookie时,它们没有设置。在
我已尝试在设置文件中设置以下内容:
SESSION_COOKIE_DOMAIN = 'www.sitedomain.com'
CSRF_COOKIE_DOMAIN = 'www.sitedomain.com'
也尝试过:
^{pr2}$我有django.middleware.csrf.CsrfViewMiddleware'添加到我的中间件类中设置.py表格中有一个CSRF代币,它会出现在帖子中。在
我启用了cookies。我已经在多个浏览器和机器上尝试过了。在
前面有一个varnish代理服务器www.sitedomain.com网站我认为这可能是问题的一部分。任何有使用代理服务器和Django的经验的人都可以对此有所了解。在
我的apache2配置:
NameVirtualHost *:80
<VirtualHost *:80>
ServerName www.sitedomain.com
ServerAlias www.sitedomain.com
<Location "/">
Options FollowSymLinks
SetHandler python-program
PythonInterpreter nzsite
PythonHandler django.core.handlers.modpython
PythonDebug On
PythonPath "['/var/www/django_projects', '/var/www', '/usr/lib/python2.6/dist-packages'] + sys.path"
SetEnv DJANGO_SETTINGS_MODULE project_one.settings
</Location>
<location "/phpmyadmin">
SetHandler None
</location>
</VirtualHost>
<VirtualHost *:80>
ServerName othersite.sitedomain.com
ServerAlias othersite.sitedomain.com
<Location "/">
Options FollowSymLinks
SetHandler python-program
PythonInterpreter ausite
PythonHandler django.core.handlers.modpython
PythonDebug On
PythonPath "['/var/www/django_projects', '/var/www', '/usr/lib/python2.6/dist-packages'] + sys.path"
SetEnv DJANGO_SETTINGS_MODULE project_two.settings
</Location>
<location "/phpmyadmin">
SetHandler None
</location>
</VirtualHost>
你用csrf信息更新你的模板数据吗?在
问题是我的站点前面有一个Varnish代理服务器。Varnish正在接受请求并从他们身上剥下饼干。为了解决这个问题,我不得不让管理Varnish服务器的公司将'/admin'添加到异常列表中,这样cookies就可以被传递了。抱歉,我不能解释一下清漆工艺是如何工作的。在
您是否在表单模板中包含
{{csrf_token}}
?在包括中间件?在
^{pr2}$从您的编辑来看,这可能与Apache中的VirtualHost配置有关(如果您的提供者使用的是Apache)。这是我的一个apache配置的编辑版本。在
在这种情况下,可能是apache中的服务器名必须与您点击的域名相匹配,以及Django配置中的*\u COOKIE_域设置。我不确定你是否能改变这一切。如果没有其他的答案能让你胜出的话,也许值得和你的供应商谈谈。在
相关问题 更多 >
编程相关推荐