2012-06-19 26 views
5

kullanarak bir çerez silme:ben gelecek kod yazdım java

public void delete(MyType instance) { 
     List<MyType> myList = this.getAll(); 

     Cookie[] cookies = request.getCookies(); 
     List<Cookie> cookieList = new ArrayList<Cookie>(); 
     cookieList = Arrays.asList(cookies); 
     for(Cookie cookie:cookieList) { 
      if(Long.valueOf(cookie.getValue()) == instance.getId()) { 
       cookieList.remove(cookie); 
      } 
     } 
     myList.remove(instance); 
     cookies = (Cookie[]) cookieList.toArray(); 
} 

konu yanındadır i geri i (silinmiş çerezlerden olmadan) güncellendi cookielist koyabilirsiniz nasıl cookielist gelen çerez sildiğinizde müşteri? istek veya yanıt herhangi bir *.setCookies(); yöntemine sahip değil. veya çerezler otomatik olarak güncellenecek mi? Saygılarımızla.

+0

Bunu HTTP HEADERS'ınıza yerleştirmeyi denediniz mi? – jocelyn

+0

@jocelyn nope, ben yapmadım. –

cevap

14

Sen (istediğiniz bir değer kurduysanız ve aynı yolu) geri HttpServletResponse#addCookie() tarafından tepkisi üzerinde bir null değeri ve 0 bir maksimum yaş aynı çerez ayarlamanız gerekir. Beton sorununa


İlgisiz

cookie.setValue(null); 
cookie.setMaxAge(0); 
cookie.setPath(theSamePathAsYouUsedBeforeIfAny); 
response.addCookie(cookie); 

, geri hiç bir listeye dizi masaj ve gerekmez. Geliştirilmiş döngü, dizilerde iyi çalışır. Ayrıca, Long değerlerini karşılaştırmak için == kullanarak, yalnızca -128 ve 127 arasındaki değerler için çalışır. Bunun yerine equals() gerekir. Yani sonuçta, yöntem bu gibi görünebilir:

public void delete(MyType instance) { 
    Cookie[] cookies = request.getCookies(); 

    if (cookies != null) { 
     for (Cookie cookie : cookies) { 
      if (Long.valueOf(cookie.getValue()).equals(instance.getId())) { 
       cookie.setValue(null); 
       cookie.setMaxAge(0); 
       cookie.setPath(theSamePathAsYouUsedBeforeIfAny); 
       response.addCookie(cookie); 
      } 
     } 
    } 
} 

arada, bazı sınıfın request ve response olmanın örnek değişkenleri görmek korkutucu. Belirli sınıfın threadafe olduğundan emin misin? Servlet ve iş parçacığı anlamak için, bu cevabı yararlı bulabilirsiniz: How do servlets work? Instantiation, sessions, shared variables and multithreading.

+1

@ BalusC bu yüzden request.getCookies() yöntemini çağırmam ve WebUtils.getCookie yöntemi ile yapmam gerekmiyor mu? –

+0

WebUtils.getCookie' yönteminin ne olduğu hakkında hiçbir fikrim yok. Belki de aşina olmadığınız ancak sizin sorunuzda bir şey söylemediğin 3. parti bir çerçeveden geliyor. Sadece standart Java EE yığınını düşündüğünüzde, sorunuz bir üçüncü taraf çerçevesine dair herhangi bir gösterge vermedi. – BalusC

+1

@ BalusC, Uzun değerler hakkında bu özelliği bilmiyordum. tamir edeceğim. thnx. –