如何在 Django 中更新 cookie

问题描述 投票:0回答:5

在其他语言中,更新 cookie 中的过期日期等非常容易,但我一辈子都不知道如何在 Django 中做到这一点!

更新过期日期而不是设置新的 cookie 的原因是这样我就不必在每个页面上进行数据库调用。

编辑: 感谢您的所有答案,但似乎对我想要完成的任务有些困惑,所以我会尝试更准确: 设置或获取 cookie 不是问题。我想知道的是如何更新已经设置的cookie。 抱歉造成误会!

django cookies
5个回答
21
投票

在某些时候,对于新用户,您应该设置 cookie。 Cookie 过期时间通常是针对每个用户的情况。 在 Django 中,您可以使用以下代码设置 cookie 年龄:

response = redirect('somewhere') # replace redirect with HttpResponse or render
response.set_cookie('cookie_name', 'cookie_value', max_age=1000)

上述 cookie 将在用户浏览器中 1000 秒后过期。

还有一个

expires
属性,您可以在其中指定过期日期。

参考:https://docs.djangoproject.com/en/2.0/ref/request-response/#django.http.HttpResponse.set_cookie

编辑

从 django 源代码中,尝试以下操作:

response = redirect('somewhere') # replace redirect with HttpResponse or render
response.cookies['cookie_name']['expires'] = datetime.today() + timedelta(days=1)

从今天起上述1天到期。


3
投票

访问cookie:

request.COOKIES[..]

设置cookie:

response.set_cookie()

更多信息在这里:django 书籍:会话...


0
投票

三种方式: 1)

response = render_to_response(template_name, {'data':'data'})
response.set_cookie("cookie_name","test_value")
return response

2Midellware:http://justcramer.com/2007/12/20/set-cookies-without-a-response-in-django/

3)模板中的 JavaScript


0
投票

这就是如何使用任何上下文渲染模板并更改 cookie

    context = {"any_context_key_1":"value_1", "key_2": "value_2"}
    response = render(request, 'index.html', context)
    response.set_cookie("this_is_cookies_key", "this_is_its_value", max_age=None)
    return response 

0
投票

使用 Django >= 4.2 提高 Cookie 的安全性:

# set cookie with **Request**:
request.get_signed_cookie("name")

# get cookie with **Response**:
response = render(request, "index.html")
response.set_signed_cookie("name", "value")
return response

参考:https://docs.djangoproject.com/en/5.1/ref/request-response/#django.http.HttpResponse.set_cookie

© www.soinside.com 2019 - 2024. All rights reserved.