2012-05-22 3 views
1

Я использую Django == 1.1 (я должен)
и сеанс, основанный на файлах. Я получаю следующий traceback (ниже)Django Файловый сеанс - слишком длинное имя файла

Я знаю, что во время инициализации django.contrib.sessions.backends.file.SessionStore конструктор получает очень длинный session_key. Но где этот экземпляр класса создан - я не знаю. Я пытаюсь это выяснить. И почему создается так долго session_key?

Traceback (most recent call last): 
    File "/Users/john/.virtualenvs/app/lib/python2.7/site-packages/django/core/servers/basehttp.py", line 279, in run 
    self.result = application(self.environ, self.start_response) 
    File "/Users/john/.virtualenvs/app/lib/python2.7/site-packages/django/core/servers/basehttp.py", line 651, in __call__ 
    return self.application(environ, start_response) 
    File "/Users/john/.virtualenvs/app/lib/python2.7/site-packages/django/core/handlers/wsgi.py", line 245, in __call__ 
    response = middleware_method(request, response) 
    File "/Users/john/.virtualenvs/app/lib/python2.7/site-packages/django/contrib/sessions/middleware.py", line 36, in process_response 
    request.session.save() 
    File "/Users/john/.virtualenvs/app/lib/python2.7/site-packages/django/contrib/sessions/backends/file.py", line 88, in save 
    fd = os.open(session_file_name, flags) 
OSError: [Errno 63] File name too long: '/tmp/sessionid.eJydVktv4zYQ9m63Fx7aQ3-EfXJFvYWeit1FkYuLrpNuDwsQlMTQSmRJJqU4KVCgP70zQ8mPxMmhB8kWh5z55psX_33_z-7d4uaDaWv11_ez2UyW26rZvb_5wQpTVo224raUvdx9d_3Tu9lsUXacrefNsM2VEfmcdT5b2fXc9tL0AjaqvtoqWA5YMX2xw58uZIv1_Nujl3x7LAv4jeDh8HiXnjkruqf-byY61kV48PNg2k79_FUaK_dgI2ZXie957CqI4b2ef_y8voblhPVfuhRfGbMHrBIkHPb6foCrqilP4XLO9AVwHJ_kl5fINOnnPrPLmx-PTFV1r8zuw_VvbDYrirZ7EkZpBq-ibWxvhqJvDRhji6K8k41ul2W-3Lalqu3S7urlblDmif1BbyC2ECIfQGXVCMHa_E4VPRK7AsuAtQRS1nOpNZgAR4RVNWwQW2nviRsMi3ghLmSxUUQSytVjb5CYlOkTUENfASCMusM8GGXZujW9Kj9ViCE7h1bSIpC7KJEUjtiAmvX8Xj39bkplkOCALeqOh8zmYPeuhYNb2aEgou0xW6z-RJ4clbAOCFd9x1O20PAf_kE04ahRNbhTTv7cVqouLeahhwZ8zia3RC_zWpHIZ4sek5SO4AKB8UPcuxtaYGeixSc0fszI0oM4AeonJEKqEnhSQjNYgCLrSlpn6RkzVmHEABmYCzidlEBR4KP-FqkR-RNWCwEKCFBZWThMOIOIXUFm4-LQKSEf2qqUTUH1FSOaICGhupVD3QtSCOyhOIWTxIU27dCNVjJXqyNzrRFDhzUAotCbLI3SkWYU8QMIdauMAYfrVpbOTgjUaucgZmVAVvsuDE9UHUIURuhlSOQSZyOzITEbOmYXjl6M_mqFhkGbi_xWPopSdf0GjkSAN2Ku8TSlNOWp8xGfnHeJcEJ0NKbCRPIRXEQhiAj4IXMiQhzFLnL2pNxImlDZ6Ax-xuSPUipMXCF9secS3gF5VqL8cjhE0-5lhfGP_Yl6caZgytY4IA11uwedhnSGcOLIr1G3RTs0pCs6B9vFzqsraIcAPKYYxOkBeDb6nL-suaKt0f2EKi7hpyk4ifwpAlNYTookIQMJMb2RDy5mSXTWgs774n6jjGJf8b2CVdgN2F0jTAh3kkK3gR7bKOywqC6DhV9Xn7C3ER8NRQ3zOT3kc7Gp6tKoBhd9xJTSaLBD3hulRCdB1iPiNCRp5GIJeVMPJdBRNYCoQmIcVtxJZZkmhywaUzylvEgdqaAr80Z6YR95J4oaPmBnBm0ioRIhpbgCk2BfGdXLrhtZYV-mTgliAk1KcHPownxkKKOWlsE3kKKRDT1RoJ3bWfLiDMHNstfPcM97foh7rvN7_lvHAqzwtwP9kYalrBqaKuFRvxsVXszG_KaR7rqF1UCTdlxQTYtGusnuYW64-8k07D26GECu0uRHR3Alh2aJzfDSxYXjBQFf__P-wmEeXrjBcCi2i3cYDpOSZmnkfmIcgJQw2iUjxwGUy-chgCFJw9d7IwQ-dyHQp9zijMSDAZLxnFLtSDy9SeHw1I47_JuPFNt9hf0Zi59uWoAaRuoRNU7Wl6jdaOU4W19HnV1AHVAn4zRaL6N2odVnUa4xyvr1kL5-65viAQMcPIOpffQMh3d-8hmdf8aud2wqvZl6NQ_cJczdGkVlBcyk4v6JRKnzPl8Oy_8ACepvHw:1SWRxQ:eJ6zYlFnV8NFqaM2mjeYJUjvBlM' 
[22/May/2012 15:45:43] "GET /login/ HTTP/1.1" 500 2736 
+0

Я не знаю вашего прецедента или других ограничений, но вы должны попытаться перейти на сеансы на базе БД, если это вообще возможно. Лучшая безопасность (по крайней мере, на совместном хостинге) и * намного лучшая производительность, если у вас более нескольких тысяч сеансов для отслеживания. –

+0

'Я использую Django == 1.1 (я должен)' - любое приложение, которое вы поддерживаете, должно быстро обновляться. Вам не хватает критических обновлений безопасности. –

ответ

1

The request.session получает построен в SessionMiddleware.process_request, вы можете проверить в файле django/contrib/sessions/middleware.py. В ранних версиях (только что проверенный в недавнем Django его все еще уязвим), есть несколько проверок на входящий ключ сеанса в request.COOKIES, прежде чем касаться бэкэнд, таким образом, у вас есть длинный, который не работает session.save().

Смежные вопросы