2015-05-27 26 views
0

我使用django 1.7和python 2.73。我在Windows Server 2008上設置了django。Django無法讀取子域下的會話,但在IP地址下工作

代碼就像這樣,沒什麼特別的,輸入用戶名並保存會話,然後跳轉到另一個視圖。

def login_user(request): 
    error = None 
    if request.POST: 
     form = LoginForm(request.POST) 
     username = request.POST.get('username') 
     password = request.POST.get('password') 
     try: 
      user = authenticate(username=username, password=password) 
      print user 
     except: 
      raise Http404("Authenticate faile") 
     if user is not None: 
      login(request, user) 
      try: 
       app_user = ApplicaitionUser.objects.using('xxx').filter(user_name=username).exclude(app_name='XXXX') 
       app_user_list = list(app_user.values('user_name', 'app_name')) 
       request.session['app_user_list'] = app_user_list 
      except ApplicaitionUser.DoesNotExist: 
       raise Http404("user does not exist") 

      user_info = UserInfo.objects.filter(user_name=username) 
      user_info_list = list(user_info.values('user_name', 'user_full_name', 'user_budget_centre', 'user_email')) 
      request.session['user_info_list'] = user_info_list 
      return HttpResponseRedirect('/index/') 
     else: 
      error = 'User name or password is wrong' 
    else: 
     user_info_list = request.session.get('user_info_list', None) 
     if user_info_list is not None: 
      return HttpResponseRedirect('/index/') 
     else: 
      form = LoginForm() 
    tmp = loader.get_template("auth.html") 
    cont = RequestContext(request, {'form': form, 'error': error}) 
    return HttpResponse(tmp.render(cont)) 


def index(request): 
    try: 
     app_user_list = request.session.get('app_user_list', None) 
     user_info_list = request.session.get('user_info_list') 
    except: 
     raise Http404('Database is down') 
    else: 
     if user_info_list is not None: 
      user_name = user_info_list[0]['user_name'] 
     else: 
      return HttpResponseRedirect("/") 


===================================Rest of Code========================== 

所有工作正常,如果我使用一個IP地址(127.0.0.1:8000)。 (瀏覽器是Chrome和FireFox的最新版本。)

但是當我使用子域名(sub.domain.com)時,有些東西真的很奇怪。

在Chrome中,request.session['user_info_list']存儲的數據成功,我在數據庫檢查,然後跳轉到索引視圖,user_info_list = request.session.get('user_info_list')不能得到數據,然後回login_user看法,但這種觀點可以得到數據user_info_list = request.session.get('user_info_list')。並再次跳轉到索引視圖並request.session['user_info_list']獲取數據。

在Firefox中,不同的是user_info_list = request.session.get('user_info_list')不能login_user視圖

它允許任何URL獲取數據。

ALLOWED_HOSTS = ['*'] 

網址爲sub.domain.com.au跳躍到sub.domain.com.au/index

我也試過SESSION_COOKIE_DOMAIN = '.domain.com.au'SESSION_COOKIE_DOMAIN = 'sub.domain.com.au'SESSION_COOKIE_DOMAIN = 'domain.com.au'。它們都不起作用。

我搜索類似的問題,如Django authentication works on Chrome, but not on FirefoxDjango session doesn't work in Firefox,但不起作用。

我不太確定是代碼問題還是網絡問題。因爲所有工作正常,如果我使用IP地址。有任何想法嗎?

感謝

回答

0

的問題是網絡的問題,我們正在使用Sophos的,之後他們改變URL爲https,一切工作正常。

1

你應該這一行添加到您的settings.py

SESSION_COOKIE_DOMAIN = ".yourdomain.com" 

您使用會話cookie。將其設置爲一個字符串,如 「.example.com」(注意前導點!)用於跨域Cookie,或 對標準域Cookie使用None。

Django docs

+0

感謝您的回覆,我試過了,如果添加它,它甚至不會在IP地址下工作。 – Muke

+0

這就像從sub.domain.com到sub.domain.com/index/。這是一個標準的域名cookie或跨域cookie。因爲用戶只在sub.domain.com。謝謝 – Muke