【问题标题】:Is there a way to set a cookie for exactly 1 request?有没有办法为 1 个请求设置一个 cookie?
【发布时间】:2023-03-30 01:37:01
【问题描述】:

我想设置一个 cookie(使用 JavaScript 或 jQuery)只发送一次。

我可以在发出请求之前设置一个 cookie 的有效期,比如 1 秒后,但这似乎有点微妙。我想知道是否有办法保证 cookie 在 1 个请求中存活,并且只有一个请求......

我查看了the docs on MDN,但没有看到任何符合要求的内容。

有什么想法吗?

【问题讨论】:

  • 您是否尝试过在请求发出后通过代码删除cookie?
  • 在完成工作后删除每个页面上的 cookie。
  • 我不建议你在这种模式下玩cookie。如果您在服务器中管理它会更好。无论如何,您可以在每个请求中添加一个cookie并删除它(调用函数->添加cookie->完成请求->删除cookie)
  • 我们正在使用 cookie 来允许两个系统进行通信(一个有点旧......而且我无权访问代码库)。我不能保证其他网站会整理我的 cookie……如果没有,那么我需要能够从门卫那里识别出来并做出适当的回应。一个持续 1 个请求的 cookie 似乎是答案。我知道它并不完美 - 这就是为什么我希望有更好的解决方案......

标签: javascript jquery cookies


【解决方案1】:

您可以使用 AJAX 完成处理程序在每次请求后删除 cookie。

https://api.jquery.com/ajaxComplete/

$(document).ajaxComplete(function() {
    // delete your cookie
});

【讨论】:

    【解决方案2】:

    这是一种方法:

    1. 将cookie的值编码成JSON格式,例如
    var c = {"foo":"bar"}
    Cookies.set('test',JSON.stringify(c))
    
    1. 向该 cookie 值添加一个 nonce 值,例如 cookie 本身所需的到期时间,例如
    var c = {"foo":"bar","expire_time":1612561366588}
    Cookies.set('test',JSON.stringify(c))
    
    1. 在该时间过后使 cookie 过期,使用客户端或服务器上的标准 cookie 删除方法,例如
    var c = JSON.parse(Cookies.get('test'))
    if (c.expire_time < (new Date()).getTime()) {
      Cookies.remove('test')
    }
    

    【讨论】:

      【解决方案3】:

      看看这里:)!
      How do I set/unset cookie with jQuery?

      在我眼里,有答案!

      【讨论】:

      • 谢谢,我知道我可以删除和创建 cookie,但我希望有一种方法可以告诉浏览器只保留 1 个请求的 cookie。所以这个答案并没有真正帮助。请参阅我对我的问题的 cmets 的回复。
      • 具体来说,如果在解析 html 时请求 CSS/JS/其他资产,这是不安全的,这可能与脚本执行无关。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-15
      • 2015-04-09
      • 1970-01-01
      • 1970-01-01
      • 2011-07-05
      • 2017-08-18
      相关资源
      最近更新 更多