Есть ли максимальный лимит на количество файлов cookie в Java? - PullRequest
0 голосов
/ 06 декабря 2010
if (!foundCookie) {
    logger.info("cooookies Not found ---  ");
    ResourceBundle appName = ResourceBundle.getBundle(
        "conf/filename", Locale.getDefault());
    Enumeration bundleKeys = appName.getKeys();
    Cookie[] cookieToBeAdded = new Cookie[9000];

    int i =0 ;
    while (bundleKeys.hasMoreElements()) {    
        logger.error((String) bundleKeys.nextElement());
        String key = (String) bundleKeys.nextElement();
        String value = appName.getString(key);
        cookieToBeAdded[i] = new Cookie(("station" + i),(key+":"+ value));
        cookieToBeAdded[i].setMaxAge(24*60*60);
        logger.error(cookieToBeAdded[i]+"cookieToBeAdded[i]");
        // logger.info("cooookies adding to response ---  " + cookieToBeAdded[i].getName() + ":" + cookieToBeAdded[i].getValue());
        response.addCookie(cookieToBeAdded[i]);

        pw.write("<Source>");
        pw.write("<name>"+value+"</name>");
        pw.write("<id>"+key+"</id>");
        pw.write("</Source>");
        i++;
    }
}

Я пытаюсь запустить приведенный выше код и получаю следующую ошибку:

java.lang.ArrayIndexOutOfBoundsException
    at java.lang.System.arraycopy(Native Method)
    at org.apache.coyote.http11.InternalOutputBuffer.write(InternalOutputBuffer.java:680)
    at org.apache.coyote.http11.InternalOutputBuffer.sendStatus(InternalOutputBuffer.java:419)
    at org.apache.coyote.http11.Http11Processor.prepareResponse(Http11Processor.java:1588)
    at org.apache.coyote.http11.Http11Processor.action(Http11Processor.java:934)
    at org.apache.coyote.Response.action(Response.java:183)
    at org.apache.coyote.Response.sendHeaders(Response.java:379)
    at org.apache.catalina.connector.OutputBuffer.doFlush(OutputBuffer.java:305)
    at org.apache.catalina.connector.OutputBuffer.close(OutputBuffer.java:273)
    at org.apache.catalina.connector.Response.finishResponse(Response.java:486)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:446)
    at java.lang.Thread.run(Thread.java:636)

Когда я пытаюсь перехватить это исключение, оно не попадает в цикл перехвата. Я добавляю около 8999 значений в куки. Есть ли ограничения на размер файлов cookie?

Я использую JBoss, и это написано на сервлете (Java).

Пожалуйста, помогите?

Ответы [ 3 ]

2 голосов
/ 06 декабря 2010

Похоже, что у кота есть предел размера строки или заголовка, с которым вы сталкиваетесь.

Реальный вопрос в том, почему вы пытаетесь использовать так много файлов cookie. Если у вас много информации о пользователе, сохраните ее в сеансе или в базе данных на стороне сервера - не заставляйте ее отправлять по сети при каждом отдельном запросе.

0 голосов
/ 06 декабря 2010

Мне неизвестны какие-либо ограничения в какой-либо конкретной реализации сервера, но существуют определенные ограничения на размер и количество файлов cookie для браузера в зависимости от браузера, и, конечно, они различаются в зависимости от поставщика браузера и версии браузера. .

0 голосов
/ 06 декабря 2010

Похоже, что это исключение происходит после того, как ваш код сервлета вернулся, и Tomcat создает ответное сообщение. (Это объясняет, почему вы не можете поймать исключение, и почему вы не можете увидеть ни один из ваших методов в трассировке стека.)

Однако, исключение происходит в самом странном месте. Похоже, write метод пытается скопировать данные после конца буфера сообщений. Но это происходит, когда он пишет строку состояния; то есть первая строка ответа. Единственное объяснение, которое я могу придумать, это

  • он ранее пытался и не смог написать заголовок, содержащий куки,
  • пытается перераспределить буфер и начать заново, а
  • что-то идет не так.

Я думаю, что решение состоит в том, чтобы увеличить размер буфера ответов Tomcat или уменьшить размер заголовков.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...