2013-11-20 2 views
1

Мне нужно изменить значение cookie другого домена, я знаю, что мы не сможем его использовать, используя javascript. Возможно ли использование сервлета?Может ли сервлет изменить cookie другого домена

Я стараюсь, как это, но без успеха? были ли я ошибаюсь? я два веб-приложение namly Cookies1 и Cookies2 развернуты в одном коте в локальном хосте

сервлета cookie1 применения

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
     response.setContentType("text/html"); 
     PrintWriter pw = response.getWriter(); 

//  String Html = "<HTML><BODY>HI</body></html>"; 
//  pw.write(Html); 

     Cookie cookie = new Cookie("__utmz", "Arvind"); 
     cookie.setDomain("http://localhost:8080/Cookie2"); 
     cookie.setPath("/"); 

     response.addCookie(cookie); 

     //response.getWriter().write(Html); 
    } 

сервлета cookie1 применения

protected void doGet(HttpServletRequest request, 
      HttpServletResponse response) throws ServletException, IOException { 
     System.out.println("CookieSetDm.doGet()"); 
     Cookie[] cookies = request.getCookies(); 
     if (cookies != null) { 
      for (int i = 0; i < cookies.length; i++) { 
       System.out.println(cookies[i].getName() + " <> "+ cookies[i].getValue()); 
      } 
     } 
    } 

ответ

2

Вы не можете по соображениям безопасности, изменить файлы cookie одного домена, используя сервлет или JavaScript, размещенные в другом домене. См RFC 6265, section 4.1.2.3:

Агент пользователя будет отклонять куки, если атрибут домена не определяет область для печенья, который будет включать сервер происхождения. Например, пользовательский агент принимает cookie с атрибутом Domain «example.com» или «foo.example.com» от foo.example.com, но пользовательский агент не принимает cookie с Атрибут домена "bar.example.com" или "baz.foo.example.com".

Но вы можете установить cookie в сервлет/скрипт, а затем прочитать/изменить cookie в другом сервлете/скрипте на том же хосте. Вы can даже читаете или изменяете набор файлов cookie на сервере, работающем на одном порту с тем же именем/доменом, с сервера, работающего на другом порту с тем же именем/доменом, - поэтому вы можете использовать Tomcat на двух разных портах на одном сервере и обмен куки между ними.


Обратите внимание, что вы звоните setDomain неправильно в первом примере - это поле куки занимает доменное имя, а не полный URL. Таким образом, вызов должен выглядеть следующим образом:

cookie.setDomain("localhost"); 

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

+1

+1 для использования более точного RFC. 6265 obsoletes 2965 obsoletes 2109. Кстати, «localhost» не является допустимым доменом для cookie (не начинается с точки и содержит встроенные точки), и некоторые браузеры могут и будут отклонять его. –

2

Вы можете сделать это только между двумя доменами, которые заканчиваются на одну и ту же вещь; например вы можете установить домен cookie на «.domain.com», чтобы «x.domain.com» и «y.domain.com» имели к нему доступ. Правила перекрестного домена cookie описаны в RFC 2109. В частности:

4.3.2 Отклонение Печенье

Чтобы предотвратить возможные нарушения безопасности или конфиденциальности, агент пользователя отклоняет печенье (не хранит свою информацию), если любой из следующих условий:

  • Значение атрибута Path не является префиксом URI запроса.

  • Значение атрибута домена не содержит встроенных точек, или не начинается с точки.

  • Значение для узла-получателя не соответствует домену с атрибутом домена .

  • Запрос-хозяин представляет собой полное доменное имя (не IP-адрес) и имеет вид HD, , где D является значением атрибута домена, и Н представляет собой строку , которая содержит одну или несколько точек.

Примеры:

  • A Заданная-Cookie из запроса-хоста y.x.foo.com для домена = .foo.com будет отклонено, поскольку Н y.x и содержит точку.

  • Set-Cookie from request-host x.foo.com для домена = .foo.com будет принят .

  • Set-Cookie with Domain = .com или Domain = .com., Всегда будет отклонен, потому что нет встроенной точки.

  • Set-Cookie with Domain = ajax.com будет отклонен, поскольку значение для домена не начинается с точки.

До тех пор, пока вы не нарушая вышеуказанные правила, вы прекрасно. В противном случае браузеры отклонят cookie.

Следует отметить, что «localhost» не соответствует приведенным выше правилам, а некоторые браузеры могут и запрещают куки-файлы с доменом «localhost».

Смежные вопросы