Проблемы с cookie в IE и Chrome (работа с Java) - PullRequest
1 голос
/ 25 мая 2011

Я пытаюсь отправить изображение клиенту из сервлета и добавить файл cookie, содержащий идентификатор изображения, в ответ.(я не хочу отображать одно и то же изображение более чем N раз).

Похоже, что Internet Explorer не заботится о файлах cookie, и я всегда получаю нулевую ссылку, когда вызываю request.getCookies ();,С Opera все работает отлично.

Chrome видит куки, но я получаю следующее исключение, когда записываю изображение в outputStream: ClientAbortException: java.net.SocketException: программно вызвано прерывание соединения: ошибка записи в сокет

Я еще не пробовал Мозиллу.

Есть ли обходной путь для Internet Explorer, кроме файлов cookie?Сеансы работают с моим Internet Explorer.

Есть ли какие-либо идеи для исключения, возникающего при использовании Chrome?(размер изображения меньше 1 МБ).

Вот код сервлета:

    public void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
response.setContentType("image/jpeg");
response.addHeader ("Content-Disposition", "attachment");
response.setHeader("Cache-Control", "no-cache,no-store,must-revalidate");
response.setHeader("Pragma", "no-cache");
response.setDateHeader("Expires", 0);
HttpSession session = request.getSession();
String requestURI = request.getParameter("requestURI");
String resolution = request.getParameter("resolution");
Cookie[] cookies = request.getCookies();
try
{
if (cookies == null)
     coada = (new BannerChooser().Choose(1));
String filePath = null;
Iterator it = coada.iterator();
boolean found =false;
while ((!found) && it.hasNext())
{
    found = true;
    if (cookies!=null)
   for (int i = 0; i < cookies.length; i++)
       if ( Integer.parseInt(cookies[i].getValue()) == ((BannerNota)it.next()).getB().getId())
       {
           found = false;
           break;
       }
       if (found)
       {
           BannerNota bannerToDisplay = (BannerNota)it.next();
           Cookie cookie = new Cookie(bannerToDisplay.getB().getId().toString(),bannerToDisplay.getB().getId().toString());
           cookie.setMaxAge(60*60*24);
           cookie.setPath("/licenta");
           filePath = bannerToDisplay.getB().getPath();
           response.addCookie(cookie);
           break;
       }

}
filePath = "h:/program files/Workspace/licenta/WebRoot/" + filePath;
File f = new File(filePath);
byte[] b = new byte[(int)f.length()];
FileInputStream fis = new FileInputStream(f);
fis.read(b);
ServletOutputStream out  = response.getOutputStream();
out.write(b);
out.close();
}
catch (Exception e)
{
    e.printStackTrace();
}

}

1 Ответ

1 голос
/ 25 мая 2011

Файлы cookie основаны на домене. Многие браузеры отклоняют файлы cookie на встроенных ресурсах (CSS / JS / images), которые обслуживаются из другого домена, а не из страницы.

Вы хотите управлять куки, используя вместо этого JavaScript. Google Analytics также делает это таким образом. На quirksmode.org вы можете найти хороший учебник , как управлять файлами cookie с помощью JavaScript . Любая информация на основе файлов cookie затем может быть отправлена ​​в качестве параметра запроса на URL изображения.

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