有没有办法为 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?的主要内容,如果未能解决你的问题,请参考以下文章