modwsgiとMD5
djangoをwsgiで動かそうとすると認証ができない。
なぜかクッキーが有効になってないと表示される。多分セッション回りでおかしいのだという検討がつくが…。djangoのrunserverからは大丈夫でapacheからは駄目という謎挙動。クッキーを見るとsessionidの先頭8文字が0にあるという妙な具合になる。
32bitと64bitとの違いなのかとも悩む。Session.objects.get_new_session_key()を出力させるとやはりおかしい。md5の出力もやはり先頭が0になっている。しかもmd5.new('1')もmd5.new('2')も同じ結果になるがリロードする度に値が変わる。sessionが維持できなかったのはmd5の挙動がおかしいのが原因ということまでは突き止めたが、なぜおかしいのかがわからなかった。
で、探してみると原因が判明。mhash2どシンボル名が衝突していたによるものだった。削除してみたら挙動が正常になった。PHP回りで使用しているんですよねえ。python-2.5からは実装が変更になったから大丈夫らしいが…。
- http://code.google.com/p/modwsgi/wiki/ApplicationIssues (Python MD5 Hash Module Conflict)