在带有 Apache2 的 Linux 服务器上运行 Django 1.2.5,出于某种原因,Django 似乎无法存储 CSRF 或会话 cookie。因此,当我尝试登录 Django 管理员时,它会在提交登录表单时给我一个 CSRF 验证错误。有没有人反对这个并找到解决方案?
当我在我的主机提供的 VPS 的 url 上尝试此操作时,我能够发布有效的帖子。示例:vps123.hostdomain.com/admin/ 并且为该域设置了 cookie。但是,当我访问 www.sitedomain.com/admin/ 并尝试登录时,我收到一个 CSRF 403 错误,提示 cookie 不存在,并且当我签入浏览器 cookie 时,它们未设置。
我尝试在我的设置文件中设置以下内容:
SESSION_COOKIE_DOMAIN = 'www.sitedomain.com'
CSRF_COOKIE_DOMAIN = 'www.sitedomain.com'
也试过:
SESSION_COOKIE_DOMAIN = 'vps123.hostdomain.com'
CSRF_COOKIE_DOMAIN = 'vps123.hostdomain.com'
我在 settings.py 的 MIDDLEWARE_CLASSES 中添加了“django.middleware.csrf.CsrfViewMiddleware”,并且表单中有一个 CSRF 令牌,它显示在 POST 中。
我启用了 cookie。我已经在多个浏览器和机器上尝试过这个。
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>