【问题标题】:How to set or get a cookie value in django如何在 django 中设置或获取 cookie 值
【发布时间】:2011-07-04 01:47:54
【问题描述】:

这是我的代码:

from django.shortcuts import render_to_response, get_object_or_404
from django.template import RequestContext
from django import http
from django.http import HttpResponse 

def main(request, template_name='index.html'):
    HttpResponse.set_cookie('logged_in_status', 'zjm1126')
    context ={
              'a':a,
              'cookie':HttpResponse.get_cookie('logged_in_status'),
    }

    return render_to_response(template_name, context)
    #return http.HttpResponsePermanentRedirect(template_name)

它引发了这个异常:

unbound method set_cookie() must be called with HttpResponse instance as first argument (got str instance instead)

我能做什么?

【问题讨论】:

    标签: django cookies


    【解决方案1】:

    你不能只是开始调用 HttpResponse 类的方法,你必须实例化它,例如response = HttpResponse("Hello World"),调用cookie方法,然后从你的视图中返回。

    response = render_to_response(template_name, context)
    
    response.set_cookie('logged_in_status', 'never_use_this_ever') 
    return response
    # remember my other answer: 
    # it's a terrrible idea to set logged in status on a cookie.
    

    获取 cookie:

    request.COOKIES.get('logged_in_status') 
    # remember, this is a terrible idea.
    

    【讨论】:

    • 设置登录状态是可以的(我一直这样做)只是不要在服务器端代码中使用它。
    • 您的其他答案在哪里?为什么不可以?
    • @avi,我不确定我的其他答案在哪里,但这是一个糟糕的主意,因为客户端可以轻松修改 cookie,因此使用 cookie 来确定用户是否登录非常不安全。我无需登录即可轻松将我的 cookie logged_in_status 设置为 True。
    • 重点是:不要让它成为布尔标志,而是某种类型的 session_id。所以客户端不能仅仅“决定”它是否已登录。当然,auth 会为您执行此操作。
    • @cs01, "此外,如果 cookie 是使用 HTTPOnly 标志发送的,则客户端无法修改它们"。这仅适用于浏览器客户端。在浏览器之外操作 httponly cookie 非常简单,因此尽管您基本上是正确的,但我认为假设 HTTPOnly cookie 不会被篡改并不好。不过我同意你的其他观点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-08
    • 2018-11-05
    • 2015-07-01
    • 2011-04-01
    • 2018-12-21
    • 2017-12-25
    • 1970-01-01
    相关资源
    最近更新 更多