2011-03-19 2 views
0

나는 장고 1.2.5 (stable release) 사이트를 가지고 있는데 이것은 Ubuntu 10.10 컴퓨터에서 개발되고 테스트되고있다. 개발 상자는 사이트를보고 테스트 할 수 있어야하는 일부 Windows 컴퓨터가있는 LAN에 있습니다. 지금까지 내가 공유하려고하는 것은 바로 관리자입니다. 명령 와 개발 서버를 시작할 때Django 개발 서버의 로컬 및 원격 컴퓨터 쿠키 전달의 차이점은 무엇입니까?

이 사이트는 dev에 상자에 잘 작동하고 127.0.0.1:8080/admin 또는 192.168.17.165:8080/admin (dev에 상자의 LAN IP)에서 실행할 수 있습니다 ./manage.py runserver 및 ./manage.py runserver 192.168.17.165:8080. 그러나 windows 컴퓨터가 192.168.17.165:8080/admin으로 서버에 연결하려고 시도하면 관리 로그인 페이지가 잘로드되므로 문제가 거의 올바르게 설정되지만 확인 된 사용자 이름과 비밀번호를 입력하면 제출 버튼 누르면 게시물이 실패하고 다음과 같은 오류가 반환됩니다

Forbidden (403) CSRF verification failed. Request aborted. 
Reason given for failure: 
No CSRF or session cookie. 

여기

(매우 유사 @ thomallen의 게시물에)있는 모든이하지 않는 것 내가 이미 검사 한 몇 가지 효과 :

login.html 템플릿에 {% csrf_token %} 토큰이 추가 된 것을 알고 있습니다. 페이지 원본을 볼 때

{% block content %} 
{% if error_message %} 
<p class="errornote">{{ error_message }}</p> 
{% endif %} 
<div id="content-main"> 
<form action="{{ app_path }}" method="post" id="login-form">{% csrf_token %} 
    <div class="form-row"> 
    <label for="id_username">{% trans 'Username:' %}</label> <input type="text" name="username" id="id_username" /> 
    </div> 

이 있습니다. (stockadmin login.html

여기에 표시된대로 모든 미들웨어 라인의 순서가 엉망이되었습니다. http://josh.gourneau.com/blog/2010/02/17/django-12-csrf-verification-failed/. 아무것도. 여기 내가 무엇을 가지고 :

MIDDLEWARE_CLASSES = (
    'django.middleware.common.CommonMiddleware', 
    'django.contrib.sessions.middleware.SessionMiddleware', 
    'django.middleware.csrf.CsrfViewMiddleware', 
    'django.middleware.csrf.CsrfResponseMiddleware', 
    'django.contrib.auth.middleware.AuthenticationMiddleware', 
    'django.contrib.messages.middleware.MessageMiddleware',) 

가 내가 생각 어쩌면 내가이 엉망해야하지만
SESSION_COOKIE_DOMAIN = '192.168.17.165' 
CSRF_COOKIE_DOMAIN = '192.168.17.165' 

다른 모든 쿠키 및 웹 기록을 지워 도움을 보이지 않았다. 방화벽을 사용 중지했습니다.

나의 현재 의심 : dev에 상자 (작동 하나)에 는, 파이어 폭스는 현재 2 개 쿠키, 세션 id 및 csrftoken을 보여줍니다. 창문 상자는이 토큰을 얻지 못하는 것 같습니다. 두 컴퓨터에서 Firefox 라이브 HTTP 헤더 플러그인을 사용하여 HTTP 헤더를 조사했습니다.

Set-Cookie: csrftoken=83bae579460e9d123d9d904f4e2ef4d5; Max-Age=31449600; Path=/ 
Set-Cookie: sessionid=ec2b472837318347f6e6c8243f9e0afd; expires=Sat, 02-Apr-2011 04:29:46 GMT; Max-Age=1209600; Path=/ 

창문 상자가 매우 유사 정보를 얻을 수 있지만, 쿠키의 최대 사용 기간은 0 (최대 - 나이 = 0)으로 설정됩니다 (서버와 같은) 리눅스 상자를 가져옵니다. 그 후에, Windows 머신은 쿠키를 저장하지 않습니다. 이것은 분명히 ietf.org/rfc/rfc2109.txt에 따라 세션을 종료시킵니다. 나는 SESSION_COOKIE_AGE를 10000으로 설정하려고 시도했으나 취하지 않았습니다.

Django 개발 서버가 원격 컴퓨터에 유효한 쿠키를 보내려면 어떻게해야합니까? 나는 유일한 사람이 될 수 없다 ...유망 듯하지만

기타 유사한 유래 게시물과 링크가 작동하지 않았다 : 나는 모든 문서를 읽고 있었다 Why is Django admin login giving me 403 CSRF error? Django outputs CSRF token as object instead of value

몇 사람들이 내가 그것을 볼 수 있도록 내가 단서가 없다 이것이 원인 일 수 있습니다. 해결 방법으로 CSRF를 비활성화하는 방법이있을 것이라고 확신하지만이 방법이 효과가 없을까요?

+0

추가 정보 : linux 상자는 Django 관리자 페이지를 LAN의 다른 Linux 및 Mac 시스템에 잘 전달합니다. 나는 새로운 기계를 설치하고 그것은 다른 기계의 관리 페이지를 볼 수 있으며, 오래된 기계는 새로운 기계의 관리자를 볼 수있다. 그냥 창문이 없어요 ... 아직도 쿠키를 의심하고 있습니다. – Tudor

답변

2

그것은 꺼지지 않은 보조 소프트웨어로 밝혀졌습니다. CA Anti Virus는 사실 이후에 쿠키를 차단하는 별도의 프로세스를 실행했습니다.

관련 문제