【问题标题】:How to filter cookies when you send ajax request?发送ajax请求时如何过滤cookie?
【发布时间】:2021-07-13 02:51:18
【问题描述】:

如果您向服务器发送 ajax 请求并且您的 cookie 太大,您会收到以下消息:

错误请求

您的浏览器发送了一个此服务器无法理解的请求。 请求头字段的大小超出服务器限制。

饼干

在发送请求之前,有没有办法通过 javascript(jQuery、Angular)过滤 cookie?例如:我在某个网站上有 25kb 的 cookie(服务器限制为 16kb),其中有一个会话 cookie。如何仅将会话 cookie 发送到服务器或我想要的 cookie?在不删除多余 cookie 的情况下是否可以这样做?

另一个例子: 我有域 cookie .mysite.com。如果我去one.mysite.com 我会得到另一个cookie,当我去two.mysite.com 时会安装新的cookie 等等。当我从其中一个站点发送ajax 请求时,cookie 正在汇总,它们都转到可能超过的请求标头服务器限制。

我有很多 cookie,但没有一个超过 3kb。主要问题是:我可以通过域名过滤 JavaScript 中的 cookie 吗?

【问题讨论】:

  • 我有点困惑...如果 cookie 对您的服务器来说太大(请注意 cookie 存储在限制为 4k 的客户端上),这应该是一个问题,而不仅仅是ajax 请求,但任何 http 请求。请提供更多信息。为什么你的 cookie 超过 4k(标准 cookie 的大小限制)?
  • @jeremy 我有域 cookie .mysite.com。如果我去one.mysite.com 我会得到另一个cookie,当我去two.mysite.com 时会安装新的cookie 等等。当我从其中一个站点发送ajax 请求时,cookie 正在汇总,它们都转到可能超过的请求标头服务器限制。
  • 是的,非常令人困惑。您正在生成多少个 cookie 预域?是否有超过 4k 的 cookie?您始终可以一次调用一个 cookie,但如果太大,那么您将在一个 cookie 中存储太多。可能需要重新考虑您的代码。
  • @CesarBielich 我有很多 cookie,但没有一个超过 3kb。主要问题是:我可以按域名过滤 JavaScript 中的 cookie 吗?
  • 简单地说,没有。 cookie 存储在客户端上,并为 http 请求提供状态信息。你可能做错了什么。重新思考、重构、重新编码……

标签: javascript jquery angularjs ajax cookies


【解决方案1】:

只需在 cookie 上设置域和路径属性,例如:

<script type="text/javascript">
var cookieName = 'HelloWorld';
var cookieValue = 'HelloWorld';
var myDate = new Date();
myDate.setMonth(myDate.getMonth() + 12);
document.cookie = cookieName +"=" + cookieValue + ";expires=" + myDate + ";domain=.example.com;path=/";
</script>

然后你可以通过它的域值调用一个cookie。

【讨论】:

  • 没关系,但是当我从页面发送 ajax 请求时,页面中的所有 cookie 都会转到 Header 请求。是否有机会发送某些 cookie?
【解决方案2】:

我试图做同样的事情,看起来浏览器隐藏了对用户的这种访问权限。我想可能是出于安全原因。我们可以做的最大的事情是在获取omitsame-origininclude 时将specify the credentials config。我在the spec 中没有找到任何内容。

另一种选择是使用自定义 HTTP 标头,而不是 cookie。

This may be helpful.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-07-25
    • 1970-01-01
    • 1970-01-01
    • 2021-10-27
    • 2019-12-11
    • 2020-08-19
    • 2011-03-10
    • 2012-11-28
    相关资源
    最近更新 更多