Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python django set_test_cookie无法设置cookie 问题:_Python_Django - Fatal编程技术网

Python django set_test_cookie无法设置cookie 问题:

Python django set_test_cookie无法设置cookie 问题:,python,django,Python,Django,在django视图中使用无法实际设置测试cookie,我不知道为什么 复制步骤 实际项目要比这复杂得多,但是,在一个近乎空白的项目中,误差是可以重现的 壳 设置.py url.py polls/views.py 壳 浏览器 转到localhost:8000/login/注意,get请求没有显示名为testcookie且值为worked的响应cookie,根据set\u test\u cookie实际上,它是有效的!您可能希望在禁用cookies的情况下访问您的网站,并亲自查看 无论如何,解释如下

在django视图中使用无法实际设置测试cookie,我不知道为什么

复制步骤 实际项目要比这复杂得多,但是,在一个近乎空白的项目中,误差是可以重现的

壳 设置.py url.py polls/views.py 壳 浏览器
转到localhost:8000/login/注意,get请求没有显示名为
testcookie
且值为
worked
的响应cookie,根据
set\u test\u cookie

实际上,它是有效的!您可能希望在禁用cookies的情况下访问您的网站,并亲自查看

无论如何,解释如下: 如果查看
set\u test\u cookie
的源代码,您会注意到它实际上在当前会话中设置了一个变量,而不是cookie或任何东西(至少不是直接设置的)

下面是它的工作原理:

  • 调用
    set\u test\u cookie
    ,将
    test\u cookie\u NAME
    test\u cookie\u value
    键添加到当前会话中
  • 您当前会话已被修改(请检查
    \uuuuuu setitem\uuuu
    方法),因此(2)
  • 当您在下一个请求中发布数据时,django会检查key
    TEST\u COOKIE\u NAME
    是否恰好位于会话数据中,并且具有正确的值 如果是这样,则意味着我们能够从您的请求中检索您的会话,因此我们用于标识您的sessionid cookie被发回(以免我们无法检索您的会话),因此您必须支持cookie

    希望这能让你更清楚;如果没有,我认为您应该详细了解HTTP的工作原理

    笔记 (1) 或者无论会话\u COOKIE\u名称设置如何。

    (2) 实际上,如果
    session\u SAVE\u EVERY\u REQUEST
    设置为true,即使会话未被更改,也会发送sessionid cookie

    您是一位绅士和学者。一、 另一方面,我聪明到可以做傻事。我阅读了set_test_cookie源代码,但仍然在考虑浏览器cookie-因为名称-而不是会话变量!将
    SESSION\u COOKIE\u SECURE
    设置为
    True
    也可以在开发中发出
    请求。SESSION.test\u COOKIE\u worked()
    返回
    False
    $ virtualenv venv
    $ source venv/bin/activate
    (venv)$ pip install django
    (venv)$ django-admin.py startproject hellodjango .
    (venv)$ python manage.py startapp polls
    
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.sqlite3', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
            'NAME': 'database.db',                      # Or path to database file if using sqlite3.
            'USER': '',                      # Not used with sqlite3.
            'PASSWORD': '',                  # Not used with sqlite3.
            'HOST': '',                      # Set to empty string for localhost. Not used with sqlite3.
            'PORT': '',                      # Set to empty string for default. Not used with sqlite3.
        }
    }
    
    from django.conf.urls import patterns, include, url
    
    urlpatterns = patterns('',
        url(r'^login/$', 'hellodjango.polls.views.login'),
    )    
    
    from django.shortcuts import render_to_response
    from django.http import HttpResponse
    
    def login(request):
        if request.method == 'POST':
            if request.session.test_cookie_worked():
                request.session.delete_test_cookie()
                return HttpResponse("You're logged in.")
            else:
                return HttpResponse("Please enable cookies and try again.")
        request.session.set_test_cookie()
        return HttpResponse("Look ma, no cookies!")
    
    (venv)$python manage.py runserver