有没有办法为 1 个请求设置一个 cookie?

Posted

技术标签:

【中文标题】有没有办法为 1 个请求设置一个 cookie?【英文标题】:Is there a way to set a cookie for exactly 1 request? 【发布时间】:2015-12-21 19:54:03 【问题描述】:

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

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

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

有什么想法吗?

【问题讨论】:

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

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

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

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

【讨论】:

【参考方案2】:

这是一种方法:

    将cookie的值编码成JSON格式,例如
var c = "foo":"bar"
Cookies.set('test',JSON.stringify(c))
    向该 cookie 值添加一个 nonce 值,例如 cookie 本身所需的到期时间,例如
var c = "foo":"bar","expire_time":1612561366588
Cookies.set('test',JSON.stringify(c))
    在该时间过后使 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/其他资产,这是不安全的,这可能与脚本执行无关。

以上是关于有没有办法为 1 个请求设置一个 cookie?的主要内容,如果未能解决你的问题,请参考以下文章

android okhttp3带cookie请求

session/cookie/token的区别

预防session劫持

像浏览器一样的 Python 请求?

Ajax 跨域请求 Cookie 无法携带/保存的解决办法

cookie和session