【问题标题】:Why does Safari let you set cookies over 4kB?为什么 Safari 允许您设置超过 4kB 的 cookie?
【发布时间】:2010-11-18 20:23:43
【问题描述】:

我设置了一个 A/B 测试,需要将相当大量的数据临时存储在 cookie 中。在测试我的代码时,我设法让 cookie 超过 4kB。 Safari 设置 cookie。在随后的页面加载中,由于 cookie 太大,Apache 返回了一个错误。

我也在 Firefox 上对此进行了测试,它只是忽略了 cookie,这对我来说似乎是正确的行为。

我在 GMail 上亲眼目睹过这种情况。我曾经收到错误请求错误,不得不删除我的 cookie。这是一个已解决的已知问题。

我在网上找不到任何关于 Safari 允许超过 4kB 的 cookie 的信息。这不是潜在的危险吗?我们的用户可能被阻止访问我们的网站并且不知道发生了什么的想法是可怕的。我不知道如果它们太大,怎么可能从我们这边删除这些 cookie。

为什么 Safari 会这样做?还有其他浏览器吗?

【问题讨论】:

    标签: cookies safari


    【解决方案1】:

    http://www.nczonline.net/blog/2008/05/17/browser-cookie-restrictions/ 表示 firefox 和 safari 允许 cookie 最多 4097 个字符,IE 4095 和 Opera 4096

    这里有一些关于在错误发生时解决问题的方法,基本上错误文档会清除有问题的 cookie,因此后续请求将起作用(希望)http://www.webmasterworld.com/forum92/1163.htm

    【讨论】:

    • 谢谢。您链接到的第二页有一些有用的提示,如果有必要的话。
    【解决方案2】:

    该标准为 cookie 指定了一个特定的最小大小。但是,它没有指定最大尺寸。任何浏览器都可以存储任何大小的 cookie,只要它至少 4kb。 作为 Web 开发人员,您尝试只创建适用于所有浏览器的 cookie。在这一点上握住你的手不取决于 safari - 它只是通过接受它来处理大 cookie 的状况,而其他人则拒绝它。这既不正确,也不错误。这是完全允许的。

    我不同意你关于它有潜在危险的观点。如果由于您设置的 cookie 在某些浏览器中不起作用而阻止用户访问您的站点,那是您的错,不是吗? Safari 只是在处理其他浏览器不处理的问题。

    【讨论】:

    • 是的,您对规范的看法是正确的。我只是觉得事情的设置方式很不幸,很容易让自己陷入一个陷阱,浏览器接受超大 cookie 而网络服务器拒绝它们。 Webkit 似乎是这里的异常值。我测试过的其他浏览器不接受 cookie。搜索“bad request cookie”显示 Google、Youtube 和其他网站都存在此问题。有危险。但我猜你是对的,到头来你不能怪任何人,只能怪你自己。
    • 当然,开发人员绕过这个限制已经有很长的历史了。如果你真的需要存储一堆信息,大多数服务器端框架都可以存储“会话”数据。也就是说,cookie 仅成为服务器上包含真实信息的数据库条目的键。 asp.NET 将整个页面变成一个巨大的表单,并将信息存储到隐藏字段中,并使用 javascript 捕获所有链接点击。所有新浏览器都有一个新的“webstorage”api,可从 javascript 访问。
    • 是的,我很清楚这一点。我们每天进行大约 1000 万次页面浏览,并尝试尽可能地限制我们的数据库上的负载,因此进行了基于 cookie 的测试。但现在我们被 DB 支持的测试卡住了。
    • 好吧...您可以将 db 支持的测试限制为不支持 webstorage api 的浏览器。目前这只是 ie6、ie7 和。 .. 就是这样,真的,对于流行的浏览器。如果您对hackery 感兴趣,flash 插件可以创建大cookie。此外,还有一些 javascript 库将所有​​这些不同的技术抽象到一个接口中,并首先从最好的技术开始搜索支持。
    猜你喜欢
    • 2014-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-12
    • 2018-11-16
    • 1970-01-01
    • 2019-07-19
    • 1970-01-01
    相关资源
    最近更新 更多