2017-07-31 156 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