【问题标题】:How to display the expiration time of django-cookie?如何显示 django-cookie 的过期时间?
【发布时间】:2018-04-16 17:28:06
【问题描述】:

在我的 getCookie 函数中,我想显示给定 cookie 的名称和过期时间,但我能够归档的只是它的名称,作为一个字符串。

cookie 已设置,并按预期过期,我只想以简单的方式显示它的剩余时间。

def setCookie(request):
    cook = HttpResponseRedirect('/getCookie/')
    cook.set_cookie('theCookie', value='Dough', max_age=15)

    return cook

def getCookie(request):
    s=""
    if request.COOKIES.has_key('theCookie'):
        s += request.COOKIES['theCookie']
        #s += request.COOKIES['theCookie'].expires..? HERE?

    else:
        s="Sorry, your cookie has expired"
    return HttpResponse(s)

【问题讨论】:

  • 我不认为 django 可以提供这样的东西。在 django 中,cookie 只是名称、值对。
  • 坏消息,也许可以通过客户端脚本访问它?
  • 是的,在 javascript 中,您可以获得到期时间。

标签: django cookies


【解决方案1】:

request.COOKIES 仅包含已解析 cookie 的键/值映射。但是 request.META['HTTP_COOKIE'] 包含原始 cookie 字符串,可由 Python cookie.SimpleCookie 类解析以获取 max-age http://docs.python.org/library/cookie.html

【讨论】:

  • 啊,太好了。谢谢!我通过将 datetime.now()-string 附加到 cookie 的值,然后在打印时对其进行切片来“解决”它。不是要走的路,嗯。
【解决方案2】:

cookie 的过期时间可以这样计算:

import Cookie
val = request.META['HTTP_COOKIE']
c = Cookie.SimpleCookie()
c.load(val)
c['cookie-name'].keys()
... 
comment,domain,secure,expires,max-age,version,path,httponly

expires = c['cookie-name']['expires']

【讨论】:

  • 奇怪的是,我遇到了一个我可能再次需要它的用例。 5.5 年后。谢谢:)
  • 也许这适用于某些浏览器,但当前的 Safari 不包括 HTTP_COOKIE 数据的到期日期。
  • 我使用的是 Python 3.6,必须将导入更改为:from http.cookies import SimpleCookie,然后是 c = SimpleCookie()
【解决方案3】:

简短的回答:不可能。

【讨论】:

  • 如您所见,该声明总是被第一个这样做的人伪造:^P
【解决方案4】:

试试get_expiry_age:

request.COOKIES['theCookie'].get_expiry_age()

【讨论】:

  • 不,'request.COOKIES['theCookie']' 只返回一个字符串。 “str”对象没有属性“get_expiry_age”
  • 你是在说 Cookies,还是说真的会话?
  • 不知道有什么区别,请解释一下。
猜你喜欢
  • 2021-02-04
  • 2017-03-06
  • 2011-05-11
  • 2013-07-06
  • 2011-01-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多