【问题标题】:Tomcat: Cookies lengthTomcat:Cookie 长度
【发布时间】:2011-01-17 18:16:30
【问题描述】:

我正在为我的应用程序创建并附加一些有用信息的烹饪。

但之后就无法访问此信息。

问题是当我尝试附加太多信息时,我的 cookie 没有向前传递。当我尝试附加一些信息时,没关系。

我的问题:

  1. cookie 值的最大长度是多少?
  2. 如果是错误,有没有针对 Tomcat 5.5 的解决方法?

我正在使用以下代码创建我的 cookie:

Cookie cookie = new Cookie(key, value);
cookie.setPath("/");
response.addCookie(cookie);

为了检索我的 cookie,我正在使用以下代码:

private static String getCookieValue(HttpServletRequest request, String name) {
    boolean found = false;
    String result = null;
    Cookie[] cookies = request.getCookies();
    if (cookies != null) {
        int i = 0;
        while (!found && i < cookies.length) {
            if (cookies[i].getName().equals(name)) {
                found = true;
                result = cookies[i].getValue();
            }
            i++;
        }
    }

    return (result);
}

【问题讨论】:

    标签: java jsp cookies tomcat5.5


    【解决方案1】:

    关于 1) “cookie 值的最大长度是多少?”

    没有强制的最大值,只是RFC 2109 中的建议:

    为特定目的或有限容量而创建的用户代理 设备应提供至少 20 个 4096 字节的 cookie,以确保 用户可以与基于会话的源服务器进行交互。

    请记住,每次端点通信时都会传输 cookie。

    至于在客户端存储更大的值,我想到了dojox.storage(虽然这是 javascript,但它显示了他们解决这个一般问题的方法)。他们抽象出在客户端中存储大量数据的各种不兼容的方式 - 例如。通过使用一种可用的

    • AirDBStorageProvider,
    • AirEncryptedLocalStorageProvider,
    • AirFileStorageProvider,
    • FlashStorageProvider,
    • GearsStorageProvider,
    • WhatWGStorageProvider。

    如果您可以控制客户端,则可以使用localstorage 使用 HTML5 路由,该路由最多可提供 5MB 的本地客户端空间。

    最后一个想法:压缩或编码存储的数据,或者将其拆分,以便服务器可以接管一些实际值,而您只将密钥存储在客户端(这反过来会增加更多连接当然,整个事情的开销)。

    【讨论】:

    • 这是问题所在,我在cookie值中添加了超过4Kb
    • 我知道每次都会传输所有 cookie。有什么方法可以将信息存储在 Tomcat 服务器中,该服务器中的所有应用程序都可以访问该服务器?
    • @Victor。扩展了我的帖子,尽管我看不到一种简单而规范的方式来满足您的要求。
    • 如果您找到了一个不错的解决方案,在这里看到它会很有趣 - 所以也许您可以发布您的解决方案作为答案。干杯。
    • 好的,当我找到一个好的解决方案时,我会发布。但是,就目前而言,我正在使用一个不太好的解决方案,只将所需数据的标识符存储在 cookie 中。
    猜你喜欢
    • 2017-03-16
    • 2011-01-20
    • 2010-12-30
    • 1970-01-01
    • 1970-01-01
    • 2015-03-14
    • 1970-01-01
    • 2014-05-13
    • 1970-01-01
    相关资源
    最近更新 更多