Apache2を搭載したLinuxサーバーでDjango1.2.5を実行していると、何らかの理由でDjangoはCSRFまたはセッションCookieを保存できないようです。したがって、Django管理者にログインしようとすると、ログインフォームの送信時にCSRF検証エラーが発生します。誰かがこれに立ち向かい、解決策を見つけましたか?
ホストから提供されたVPSのURLでこれを試すと、有効な投稿を行うことができます。例:vps123.hostdomain.com/admin/およびそのドメインに対してCookieが設定されます。ただし、www.sitedomain.com / admin /にアクセスしてログインしようとすると、Cookieが存在しないというCSRF 403エラーが発生し、ブラウザで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'
「django.middleware.csrf.CsrfViewMiddleware」をsettings.pyのMIDDLEWARE_CLASSESに追加しました。フォームに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>