2017-07-31 155 views
0

我已經使用javascript document.cookie = ...設置了一些cookie,然後試圖使用request.COOKIES在Django(1.8)視圖中檢索它們。但是,當我將結果打印到控制檯時,它只是一個空字典。Django request.COOKIES返回空字典

我幾個星期前寫了這段代碼,我很確定它在工作,但現在我已經回到了破碎。 Cookies在瀏覽器控制檯的「應用程序」窗口中可見,我可以使用Javascript檢索它們,而不是Django。

我已閱讀文檔並嘗試更改我的設置,但無法看到任何有很大區別的東西。任何建議,我應該看看下一個將不勝感激。

我還沒有提供任何代碼,因爲我不知道問題出在哪裏,而且我的應用程序也不是很小。只是尋找一條途徑探索爲什麼request.COOKIES沒有返回任何東西。

感謝

編輯2: 這僅發生在Chrome。 Safari正按預期返回Cookie。

編輯1: JavaScript函數設置Cookie:

function setcookie(cookieName,cookieValue) { 
    var today = new Date(); 
    var expire = new Date(); 
    expire.setTime(today.getTime() + 3600000*24*14); 
    document.cookie = cookieName + "=" + cookieValue + ";expires="+expire.toGMTString() + "; path=/"; 
} 

實現這樣的:

setcookie('areaMain', 'map)

的Cookie在標籤:

https://i.stack.imgur.com/rP3me.png

釷恩試圖看到他們的觀點:

def index(request): 
    cookies = request.COOKIES 
    print(cookies) 

回報{}

+0

你是否回來有相同的端口?你可以在你的問題中添加更多的代碼嗎? –

+0

我沒有改變任何地方的端口,所以我認爲他們是相同的,如果他們默認情況下是相同的。我的頁面正在渲染,我只是無法檢索cookie。 – Padam0

回答

1

可以添加在您查看這樣的代碼:

def view(request): 
    response = HttpResponse("hello") 
    response.set_cookie('name', 'jujule') 
    return response 

,並期待爲組新的Cookie?

+0

是的,工作,餅乾設置。但是,如果我嘗試通過再次設置print(request.COOKIES)來打印它,我會再次得到一個空字典... – Padam0

+0

l將在本地機器上嘗試某些情況,然後在明天寫信給您。 –

0

我的測試代碼:

from django.http import HttpResponse 


def index(request): 
    print (request.COOKIES) 
    script = """ 
    <script> 
     function setcookie(cookieName,cookieValue) { 
      var today = new Date(); 
      var expire = new Date(); 
      expire.setTime(today.getTime() + 3600000*24*14); 
      document.cookie = cookieName + "=" + cookieValue + ";expires="+expire.toGMTString() + "; path=/"; 
     } 
     setcookie('areaMain', 'map'); 
    </script> 
    """ 
    response = HttpResponse("hello" + script) 
    response.set_cookie('name', 'jujule') 
    return response 

控制檯輸出:

Development server is running at http://0.0.0.0:8888/ 
Quit the server with CONTROL-C. 
{} 

而這一切權當我第一次請求的頁面不存在cookies和瀏覽器發送空的,但只設置通過迴應和js兩個請求後。

但是,如果我刷新頁面輸出是好的,瀏覽器發送cookie到服務器。

[01/Aug/2017 01:31:07] "GET/HTTP/1.1" 200 374 
{'areaMain': 'map', 'name': 'jujule'} 

希望這對你有所幫助。

+0

謝謝,我試過這個,但我仍然得到一個空的字典響應。我不認爲這個問題出現在JavaScript中,因爲它在幾個星期前編寫時才工作,而且沒有改變。我的懷疑是這是與Django設置或我的瀏覽器中的東西有關,但我不知道是什麼 – Padam0